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: 14811
  • 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: 14811
  • 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: 14811
  • 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: 14811
  • 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: 14811
  • 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 731 korisnika na forumu :: 38 registrovanih, 6 sakrivenih i 687 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: A.R.Chafee.Jr., antonije64, cavatina, ccoogg123, celik, CikaKURE, comi_pfc, crnitrn, deLacy, Dimitrise93, DonRumataEstorski, Dorcolac, DPera, Karla, Krusarac, Krvava Devetka, kybonacci, ljuba, madza, Marko Marković, mercedesamg, Mi lao shu, mikrimaus, mnn2, ruger357, saputnik plavetnila, Smiljke, Srle993, StepskiVuk, TheBeastOfMG, uruk, vathra, VJ, vlajkox, wolf431, xaver, YugoSlav, Zoca