Zadatak u C-u

1

Zadatak u C-u

offline
  • Pridružio: 15 Maj 2012
  • Poruke: 396

Trebam da napravim program koji ce da neki tekst koji se unese u program pretvori u brojke(elementi nizova slova u program. Na primer slova[12] da pretvori taj element u 12) i onda da izbaci na izlaz sve brojeve.

Mislim da vam nisam lepo objasnio, pa evo koda kojeg sam ja napisao. Znam da nije dobar i da treba da se doda else komanda posle if u for petlji ali ne znam sta treba da se stavi u else nakon if.

#include <stdio.h> #include <stdlib.h> int main() {    static char slova[] = {'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z'};    char ulaz[200];    char izlaz[200];    char *p;    int i, a;    printf("Unesite tekst: ");    gets(ulaz);    for(p = ulaz, i = 0, a = 0; *p != '\0';){       if(*p == slova[i++]){          izlaz[a++] = slova[i];          i = 0;          p++;       }    }    printf("%d\n", izlaz);    system("PAUSE");    return EXIT_SUCCESS; }

Hvala unapred!Very Happy



Registruj se da bi učestvovao u diskusiji. Registrovanim korisnicima se NE prikazuju reklame unutar poruka.
offline
  • Milan
  • Pridružio: 17 Dec 2007
  • Poruke: 14824
  • Gde živiš: Niš

Napisano: 28 Feb 2014 17:41

Definitivno nisi lepo objasnio problem. Pojasni malo bolje na konkretnom primeru o kakvoj konverziji je reč. U koji broj bi da konvertuješ recimo slovo a?

Dopuna: 28 Feb 2014 17:43

Najbolje objavi ceo tekst zadatka.



offline
  • Pridružio: 15 Maj 2012
  • Poruke: 396

Vidis ovako. U nizu slova se nalazi alfabet. Brojevi elemenata niza krecu od 0 do 25. Ako je, na primer, ukucana rec "akvarijum", 'a' treba da pretvori u 0, jer 0 oznacava slovo a u nizu. 'k' bi trebao da se pretvori u broj koji oznacava slovo 'k' tj. u broj 10.

Razumes sad?

offline
  • Milan
  • Pridružio: 17 Dec 2007
  • Poruke: 14824
  • Gde živiš: Niš

Napisano: 28 Feb 2014 17:57

Da li izlazni niz mora da bude tipa char*? Ako ne mora, zadatak se može rešiti lakše. U tom slučaju ti niz slova nije neophodan. Jednostavno računaš ulaz[i] - 'a' i to upisuješ na izlazi[i] koji je niz celih brojeva.

Dopuna: 28 Feb 2014 17:58

Naravno, u ovom slučaju podrazumevaš da se unosi niz malih slova. Smile

offline
  • Pridružio: 15 Maj 2012
  • Poruke: 396

Napisano: 28 Feb 2014 18:12

Ne mora da bude izlaz tipa char *. Ali kako mislis da to uradim?

Dopuna: 28 Feb 2014 18:35

Da li taj deo kod treba da bude ovako? Ne razumem kako cu ond da dobijem broj kada uradim tako kao sto si rekao?

gets(ulaz); izlaz[i++] = ulaz[i] - 'a';

offline
  • Milan
  • Pridružio: 17 Dec 2007
  • Poruke: 14824
  • Gde živiš: Niš

Napisano: 28 Feb 2014 18:53

crusher ::Ne razumem kako cu ond da dobijem broj kada uradim tako kao sto si rekao?Ne znaš kako se predstavlja karakter u memoriji? ASCII tabela i to? Podhitno da proučiš to. Very Happy

Elem, ono što je suština jeste da se svaki karakter predstavlja kao niz bitova, i to uglavnom kao niz od 8 bita (ASCII). Integer je pak 32 bit-a, pa je moguće "smestiti" vrednost promenljive tipa char u promenljivu tipa int. Recimo malo a se (prema ASCII tabeli) u memoriji pamti kao 01100001. Dekadni ekvivalent ovog binarnog broja je 97. Znači, malo a maltene možeš da posmatraš kao 97 (nakon što ga kastuješ u int). E sad, akvarijum. 'a' je 97, pa je ulaz[0] - 'a' = 97 - 97 što je 0, itd.

Petlja bi bila ovakva: while (ulaz[i] != '\0')       izlaz[i] = ulaz[i++] - 'a';

Dopuna: 28 Feb 2014 18:55

A još bi bolje rešenje bilo da odmah oduzimaš 'a' od svakog elementa ulaznog niza i da to zatim prikazuješ kao dekadnu vrednost: while (niz[i] != '\0')       niz[i] = niz[i++] - 'a';

offline
  • Pridružio: 15 Maj 2012
  • Poruke: 396

Napisano: 28 Feb 2014 18:58

Aha, razumem, razumem. Cuo sam za ASCII ali se nisam toga setio. Polako ali polako, prikupljam i sticem znanje sa svih strana. Hvala ti na odgovoru.

Imacu odsad to u vidu.

Dopuna: 28 Feb 2014 19:20

Ako 'a' kada se pretvori daje 97, meni onda nesto nije dobro.
Pogledaj kod.

#include <stdio.h> #include <stdlib.h> int main() {    int i = 0;    char ulaz[200];    int izlaz[200];    printf("Unesite tekst: ");    gets(ulaz);    while(ulaz[i] != '\0')       izlaz[i] = ulaz[i++] - 'a';    printf("%d\n", izlaz);    system("PAUSE");    return EXIT_SUCCESS; }

offline
  • Milan
  • Pridružio: 17 Dec 2007
  • Poruke: 14824
  • Gde živiš: Niš

printf("%d\n", izlaz);Čik pogodi što. Wink

Sama promenljiva izlaz je int*. Ovom linijom ti maltene štampaš adresu prvog elementa niza. Umesto toga, moraš da štampaš element po element u for petlji i to ovako: for (k = 0; k < i; k++)       printf("%d", izlaz[k]);

offline
  • Pridružio: 15 Maj 2012
  • Poruke: 396

I kada pokrenem program i ukucam "akvarijum" dobijam ovaj rezultat:
01021017892012

Mogao sam da stavim i da svaki element ide u novom redu, ali zelim ovako.
Ovde koliko ja vidim je problem. 'a' treba da bude 97 a ono je 01.

Zbog cega se to desava?

offline
  • Milan
  • Pridružio: 17 Dec 2007
  • Poruke: 14824
  • Gde živiš: Niš

vasa.93 ::'a' je 97, pa je ulaz[0] - 'a' = 97 - 97 što je 0, itd. Znači, a -> 0, k -> 10, v -> 21, a -> 0, r -> 17, i -> 8, j -> 9, u -> 20, m -> 12 pa na kraju imaš 01021017892012. Wink

Ko je trenutno na forumu
 

Ukupno su 1118 korisnika na forumu :: 37 registrovanih, 4 sakrivenih i 1077 gosta   ::   [ Administrator ] [ Supermoderator ] [ Moderator ] :: Detaljnije

Najviše korisnika na forumu ikad bilo je 3466 - dana 01 Jun 2021 17:07

Korisnici koji su trenutno na forumu:
Korisnici trenutno na forumu: airsuba, ajo baba, arsa, avijacija, Ben Roj, bokisha253, dankisha, DeerHunter, Dimitrije Paunovic, Doca, dolinalima, hyla, ivan979, krkalon, Kubovac, mane123, mercedesamg, Mercury, milenko crazy north, moldway, pacika, Povratak1912, Prometeus, sap, sasa87, solic, SR-3m, Toper, trutcina, vathra, Vatreni Zmaj, VJ, Vlad000, vrag81, wizzardone, Zvrk, 223223