Poslao: 28 Feb 2014 17:36
|
offline
- crusher
- Ugledni građanin
- 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!
|
|
|
Registruj se da bi učestvovao u diskusiji. Registrovanim korisnicima se NE prikazuju reklame unutar poruka.
|
|
Poslao: 28 Feb 2014 17:43
|
offline
- vasa.93
- Moderator foruma
- 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.
|
|
|
|
Poslao: 28 Feb 2014 17:50
|
offline
- crusher
- Ugledni građanin
- 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?
|
|
|
|
Poslao: 28 Feb 2014 17:58
|
offline
- vasa.93
- Moderator foruma
- 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.
|
|
|
|
Poslao: 28 Feb 2014 18:35
|
offline
- crusher
- Ugledni građanin
- 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';
|
|
|
|
Poslao: 28 Feb 2014 18:55
|
offline
- vasa.93
- Moderator foruma
- 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.
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';
|
|
|
|
Poslao: 28 Feb 2014 19:20
|
offline
- crusher
- Ugledni građanin
- 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;
}
|
|
|
|
Poslao: 28 Feb 2014 19:35
|
offline
- vasa.93
- Moderator foruma
- Pridružio: 17 Dec 2007
- Poruke: 14824
- Gde živiš: Niš
|
printf("%d\n", izlaz); Čik pogodi što.
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]);
|
|
|
|
Poslao: 28 Feb 2014 19:49
|
offline
- crusher
- Ugledni građanin
- 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?
|
|
|
|
Poslao: 28 Feb 2014 19:58
|
offline
- vasa.93
- Moderator foruma
- 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.
|
|
|
|