3 zadatka u C-u

poruka: 20
|
čitano: 5.231
|
moderatori: Lazarus Long, XXX-Man, vincimus
1
+/- sve poruke
ravni prikaz
starije poruke gore
16 godina
protjeran
offline
3. Zadatka u C-u

Ako netko zna neka riješi,jer ja doslovno nemam pojma šta trebam raditi!

Evo ovako ide:

 

1. Zadatak

Koje će vrijednosti poprimiti varijable i ,x i c nakon niza:

 

int i , c ;

float d , x =5.2;

i=(int)(d+2.83);

(i%2)?x = (float) i + 1: c = (int) (x+=15.3);

 

Ako je vrijednost varijable d: a)3 ,  2

                                              b) 5

 

2.Zadatak

 

Koje će vrijednosti poprimiti varijable i ,x i c nakon niza:

 

int i , c ;

float d , x =5.2;

i=(int)(d+2.83);

x+=(i%2)?c=i++:c=(int)(x+=15.3);

 

 

Ako je vrijednost varijable d: a) 0

                                              b) 5 , 1

 

A evo i slike:

1.zadatak:

KLIK

2.zadatak:

KLIK
zadnji zadatak al se nevidi jedna brojka neznam koja: KLIK

Poruka je uređivana zadnji put ned 17.1.2010 1:06 (Robi959).
Moj PC  
0 0 hvala 0
16 godina
protjeran
offline
3. Zadatka u C-u

Molim vas ako netko zna nek nešta napiše nemora biti točno! I ako zna postupak šta treba raditi!???? Treba mi to za sutra!

Moj PC  
0 0 hvala 0
17 godina
offline
RE: 3. Zadatka u C-u
Robi959 kaže...

Ako netko zna neka riješi,jer ja doslovno nemam pojma šta trebam raditi!

Evo ovako ide:

 

1. Zadatak

Koje će vrijednosti poprimiti varijable i ,x i c nakon niza:

 

int i , c ;

float d , x =5.2;

i=(int)(d+2.83);

(i%2)?x = (float) i + 1: c = (int) (x+=15.3);

 

Ako je vrijednost varijable d: a)3 ,  2

                                              b) 5

 

1. red: -

2. red: x = 5.2

3. red: i = (int)(3.2 + 2.83) = (int)(6.nešto) = 6

4. red: ako je i neparan broj (i%2 = 0 ako je i paran broj), x-u se nešto pridružuje; no i nije neparan pa će se c-u pridružiti (int)(x+=15.3). x+=15.3 je 20.5. x je sad 20.5. kad se to pretvori u int, dobiva se 20 i to se pridružuje c-u

 

Probaj 2. sam.

The candle flame gutters. Its little pool of light trembles. Darkness gathers. The demons begin to stir.
17 godina
offline
RE: 3. Zadatka u C-u
Robi959 kaže...

2.Zadatak

 

Koje će vrijednosti poprimiti varijable i ,x i c nakon niza:

 

int i , c ;

float d , x =5.2;

i=(int)(d+2.83);

x+=(i%2)?c=i++:c=(int)(x+=15.3);

 

 

Ako je vrijednost varijable d: a) 0

                                              b) 5 , 1

 

1. red: -

2. red: x = 5.2

3. red: i = (int)(0 + 2.83) = 2

4. red: x-su se pribraja: ako je "i" paran (a jest): vrijednost c-a nakon što mu se pridruži vrijednost i-a (koji se nakon pridruživanja uvećava za 1 i postaje 3, ali c dobiva staru vrijednost: 2). Dakle, i = 3, c = 2, dakle, x = 5.2 + 2 = 7.2.

Da i nije bio paran, x-u bi se pridružilo ono nakon dvotočke, probaj sam pročitati.

 

(napisano nakon pp zamolbe)

 

P.S. primjeti da ti nisam riješio b dijelove, dao sam ti postupak i možeš se toliko potruditi.

 

The candle flame gutters. Its little pool of light trembles. Darkness gathers. The demons begin to stir.
17 godina
neaktivan
offline
3. Zadatka u C-u

Da ne otvaram temu novu, jel mi može ko pomoći oko ovog zadatka? Zadatak je: Napisati funkciju statistika_matrice koja za zadanu kvadratnu znakovnu matricu proizvoljne veličine analizira znakove pohranjene iznad glavne dijagonale. Funkcija vraća broj znamenki i broj slova.

 

Evo mog koda:

 

#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>

void statistika_matrice(char *polje, int *slova, int *broj, int *redak, int *stupac){
    int i, j, m, n, s = 0, b = 0;
    m = *redak;
    n = *stupac;

    for(i = 0; i < m - 1; i++)
        for(j = i + 1; j < n; j++){
            if(isalpha(polje[i*m+j])) (*slova)++;
            if(isdigit(polje[i*m+j])) (*broj)++;
        }
}


int main() {
    char polje1[5000];
    int m, n, i, j;
    int slova, broj;

    printf("Unesite broj stupaca matrice: "); scanf("%d", &m);
    printf("Unesite broj redaka matrice: "); scanf("%d", &n);

    for(i = 0; i < m; i++)
        for(j = 0; j < n; j++){
            printf("mat[%d][%d]", i, j);
            scanf("%s", &polje1[i*m+j]);
        }

    statistika_matrice(&polje1[0], &slova, &broj, &m, &n);

    printf("Broj slova je: ", slova);
    printf("\nBroj brojeva je: ", broj);

    return 0;
}


Ja stvarno ne znam, već sam se pogubio... Ako netko može pomoć?

"Tako je" - povikase seljaci i slozno glavama razbise zid
 
0 0 hvala 0
16 godina
neaktivan
offline
RE: 3. Zadatka u C-u

U lijepo, matrica se sprema u 1-d polje po stupcima :D Ko u numeričkoj matematici :D

 

A reko bi da je problem u pozivanju fje statistika_matrice. Prvi argument bi trebao biti polje, bez adrese i nule, jer je polje ionako pointer na char (iako kad bolje razmislim polje==&polje[0]). I možda kod učitavanja matrice stavi "%c " (skupa sa razmakom). I slova i broj nisi stavio na nulu u mainu :D

 

A što ti točno ne radi?

Poruka je uređivana zadnji put sri 20.1.2010 0:49 (Luuka).
17 godina
protjeran
offline
RE: 3. Zadatka u C-u
1domagoj1 kaže...

Da ne otvaram temu novu, jel mi može ko pomoći oko ovog zadatka? Zadatak je: Napisati funkciju statistika_matrice koja za zadanu kvadratnu znakovnu matricu proizvoljne veličine analizira znakove pohranjene iznad glavne dijagonale. Funkcija vraća broj znamenki i broj slova.

 

Evo mog koda:

 

...
Ja stvarno ne znam, već sam se pogubio... Ako netko može pomoć?

Ima nekih taktičkih i nekih strateških pogrešaka :)

 

 

1) Zaboravio si na nulu incijalizirati brojače slova i znamenaka (varijable slova i broj). To je trebalo napraviti prije poziva funkcije ili u njoj samoj.

 

2) Bezrazložno si deklarirao statičko polje od 5000 elemenata i time bespotrebno opteretio STOG. Ako si već htio ići na ovaj pristup trebao si matricu alocirati s malloc i to točno da zauzima onoliko memorije koliko treba, te matricu time i smjestiti na heap. Iako, u zadatku niti to nije potrebno jer si mogao napraviti neko svoje najobičnije 2D statičko polje koje bi predao funkciji kao matricu.

 

3) Matricu si u funkciji main deklarirao kao 1D polje. Matrica je zapravo 2D polje, ali kada se matrica predaje funkciji preko pokazivača onda ta funkcija tu matricu gleda kao 1D polje, a ne odmah na startu još u funkciji main matricu deklarirati kao 1D polje. Znači, sva statička polja su u memoriji zapravo 1D polja, pa bila ona originalno deklarirana kao 2D polja, 3D itd... Međutim, ako ih se adresira preko pokazivača onda ih se može gledati kao 1D polja s [m*n*...] elemenata.

 

4) Pri pozivu funkcije si za broj redaka i stupaca matrice predavao vrijednosti preko pokazivača tj. call by reference. Ovo nije greška, ali jest bespotrebna komplikacija kada je i običan call by value dovoljan.

 

 

I unatoč svemu onaj najvažniji dio zadatka ti je zapravo skoro u potpunosti točan. Znači, griješio si tek u funkciji main. Na kraju bi ovako moglo biti jedno od rješenja:

 

#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>
#define MAXRED 2
#define MAXSTUP 3

void statistika_matrice(char *polje, int *slova, int *broj, int redak, int stupac){
    int i, j;
    *slova = 0;
    *broj = 0;

    for(i = 0; i < redak - 1; i++)
       for(j = i + 1; j < stupac; j++){
          if(isalpha(polje[i*redak+j])) (*slova)++;
          if(isdigit(polje[i*redak+j])) (*broj)++;
       }
}
int main() {
    int slova, brojevi;
    char matrica[MAXRED][MAXSTUP] = {{'1', 'a', 't'}, {'3','z','5'}};

    statistika_matrice(&matrica[0][0], &slova, &brojevi, MAXRED, MAXSTUP);

    printf("\nBroj slova je: %d", slova);
    printf("\nBroj brojeva je: %d", brojevi);
    return 0;
}

 

16 godina
neaktivan
offline
RE: 3. Zadatka u C-u
Tracer kaže...

3) Matricu si u funkciji main deklarirao kao 1D polje. Matrica je zapravo 2D polje, ali kada se matrica predaje funkciji preko pokazivača onda ta funkcija tu matricu gleda kao 1D polje, a ne odmah na startu još u funkciji main matricu deklarirati kao 1D polje. Znači, sva statička polja su u memoriji zapravo 1D polja, pa bila ona originalno deklarirana kao 2D polja, 3D itd... Međutim, ako ih se adresira preko pokazivača onda ih se može gledati kao 1D polja s [m*n*...] elemenata.

Samo jedno pitanje, čisto tehničko :D

 

Neki ostali programski jezici (npr Fortran, koji je rađen za matematičare i potrebe numeričke linearne algebre - dakle rad sa matricama) koristi spremanje matrice kao 1d polje, i to tako da ih sprema po stupcima. Prednost toga je što stupci nisu razbacani po memoriji, idu jedan iza drugog, i brži im je pristup. Koliko mi je poznato, kada se matrica napravi kao npr int **A (ili ako znamo veličinu int A[10][10]), to je zapravo polje pointera, gdje svaki pointer pokazuje na početak jednog stupca (ili retka). Naravno, ti stupci onda mogu biti razbacani, i procesoru može trebati duže da do njih dođe, što je minus u numeričkom računanju (posebno kod velikih dimenzija).

 

Za malloc se definitivno slažem, dinamička alokacija je uvijek dobra :D

17 godina
neaktivan
offline
3. Zadatka u C-u

E hvala vam, ove sve gluposti koje pišu tipa, s = 0, b = 0, to su sve ostaci kak sam mijenjal program i varijable. Nešto mi nije htjelo poslat jučer PM, pa evo reći ću tu, da znam da sam STOG opteretio, jer mi zapravo niti nismo radili dinamičku alokaciju, vjerojatno bi to i znao napraviti, ali se ne usudim, jer nisam baš na ti s time (još!). Hvala vam na uloženom trudu.

"Tako je" - povikase seljaci i slozno glavama razbise zid
 
0 0 hvala 0
17 godina
protjeran
offline
RE: 3. Zadatka u C-u
Luuka kaže...
Tracer kaže...

3) Matricu si u funkciji main deklarirao kao 1D polje. Matrica je zapravo 2D polje, ali kada se matrica predaje funkciji preko pokazivača onda ta funkcija tu matricu gleda kao 1D polje, a ne odmah na startu još u funkciji main matricu deklarirati kao 1D polje. Znači, sva statička polja su u memoriji zapravo 1D polja, pa bila ona originalno deklarirana kao 2D polja, 3D itd... Međutim, ako ih se adresira preko pokazivača onda ih se može gledati kao 1D polja s [m*n*...] elemenata.

Samo jedno pitanje, čisto tehničko :D

 

Neki ostali programski jezici (npr Fortran, koji je rađen za matematičare i potrebe numeričke linearne algebre - dakle rad sa matricama) koristi spremanje matrice kao 1d polje, i to tako da ih sprema po stupcima. Prednost toga je što stupci nisu razbacani po memoriji, idu jedan iza drugog, i brži im je pristup. Koliko mi je poznato, kada se matrica napravi kao npr int **A (ili ako znamo veličinu int A[10][10]), to je zapravo polje pointera, gdje svaki pointer pokazuje na početak jednog stupca (ili retka). Naravno, ti stupci onda mogu biti razbacani, i procesoru može trebati duže da do njih dođe, što je minus u numeričkom računanju (posebno kod velikih dimenzija).

 

Za malloc se definitivno slažem, dinamička alokacija je uvijek dobra :D

U C(++)u statička polja bez obzira na dimenzije su u jednom retku, dok kod dinamičkih redci su svugdje po memoriji.

16 godina
neaktivan
offline
RE: 3. Zadatka u C-u
Tracer kaže...

U C(++)u statička polja bez obzira na dimenzije su u jednom retku, dok kod dinamičkih redci su svugdje po memoriji.

I kako se sprema takva matrica? Po recima? Dakle A[10][10] je isto kao A[20] ? I recimo A[i][j] bi pointerski bilo što? A+i*(sizeof(int))+j ? Eto vidiš, to nisam znao :D

 

Hvala

17 godina
protjeran
offline
RE: 3. Zadatka u C-u
Luuka kaže...
Tracer kaže...

U C(++)u statička polja bez obzira na dimenzije su u jednom retku, dok kod dinamičkih redci su svugdje po memoriji.

I kako se sprema takva matrica? Po recima? Dakle A[10][10] je isto kao A[20] ? I recimo A[i][j] bi pointerski bilo što? A+i*(sizeof(int))+j ? Eto vidiš, to nisam znao :D

 

Hvala

Sprema se po redcima. Nulti redak, pa zatim na njegov kraj se stavlja prvi pa na njegov drugi itd... Evo i primjera:

 

#include <iostream>
#define MAXSTUP 2
#define MAXRED 3
using namespace std;

int main(){
    int i, j, matrica[MAXSTUP][MAXRED] = {{1,2,3},{4,5,6}};

    //preko 2D polja
    for(i = 0; i < MAXSTUP; i++){
       for(j = 0; j < MAXRED; j++)
          cout << matrica[i][j] << "\t";
       cout << endl;
    }
    cout << endl;

    //preko pokazivača
    int* p = &matrica[0][0];
    for(i = 0; i < MAXRED * MAXSTUP; i++)
       cout << p[i] << " (" << (int)&p[i] << ")\n";
    return 0;
}

 

Kada pokreneš program vidjeti ćeš kako ispisuje matricu u notaciji za 2D polja, a zatim kada tu istu matricu ispišeš preko pokazivača. Ono što je bitno su adrese, pa ćeš vidjeti da su u razmaku od po 4 bajta tj. svaki element polja točno je jedan iza drugoga.

 

16 godina
neaktivan
offline
RE: 3. Zadatka u C-u

Ok, skužio sam, samo si zamijenio imena varijabli MAXSTUP i MAXRED ;D

17 godina
protjeran
offline
3. Zadatka u C-u

yep. ali radilo bi i da se zovu Mujo i Haso :)

Moj PC  
1 0 hvala 0
15 godina
neaktivan
offline
3. Zadatka u C-u

Zdravo, ljudi, :D ! 

Treba mi pomoc! Treba da reshim jedan zadatak! Zadatak glasi " Napravi program u C koji ce rachunati sutrashnji datum" (Damo mu danashnji, a on nama da sutrashnji datum) Smijeh

VEJASEA
 
0 0 hvala 0
17 godina
neaktivan
offline
RE: 3. Zadatka u C-u
VeljkoooOOooOOo kaže...

Zdravo, ljudi, :D ! 

Treba mi pomoc! Treba da reshim jedan zadatak! Zadatak glasi " Napravi program u C koji ce rachunati sutrashnji datum" (Damo mu danashnji, a on nama da sutrashnji datum) Smijeh

Pa gdje si zapeo?!

15 godina
neaktivan
offline
RE: 3. Zadatka u C-u
misko28 kaže...
Pa gdje si zapeo?!

Smijeh Izvini te!! :D Samo mi se zhuri! :D Nemoj da se ljutite ;)

VEJASEA
17 godina
neaktivan
offline
3 zadatka u C-u

Ne kuzim te, jesi ti opce probao rjesit taj zadatak?

 

Ako jesi, gdje si zapeo?

 
0 0 hvala 0
15 godina
neaktivan
offline
3 zadatka u C-u

Ja sam stvarno slab ca C-om, i nemam ideju, uopshte, kako da reshim ovaj zadatak. Zapnem! :D Kada dodje 30 ili 31 dan u mesecu i kada program treba da zameni mesec ili god.

VEJASEA
Poruka je uređivana zadnji put sub 27.2.2010 11:18 (VeljkoooOOooOOo).
 
0 0 hvala 0
16 godina
protjeran
offline
3 zadatka u C-u

Pa napiši

 

cout << "i=" << i << " x=" << x << " c=" << c << endl;

 

xDDD

 
0 0 hvala 0
1
Nova poruka
E-mail:
Lozinka:
 
vrh stranice