Zadatak u C-u

3

Zadatak u C-u

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

Ali, moram li da svaku cifru unosim posebno?



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š

Druže, sad već postaješ neozbiljan. vasa.93 ::Svakako, morao bi da unosiš brojeve svaki posebno da bi izbegao dvosmislenost (123 možeš da posmatraš kao 1 i 12, kao 12 i 3, kao 1, 2 i 3...).Prva i osnovna stvar, ono što hoćeš da radiš ne možeš da radiš ciframa, već moraš brojevima. Cifara ima 10, a ti treba da "kodiraš" 26 karaktera.

E sad, ako hoćeš da unosiš brojeve odjednom, nije nemoguće, ali moraš da osmisliš algoritam na osnovu kog će računar da raspoznaje koji je koji broj.



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

Sada vec nista ne razumem, ama nista.
Stavio sam da svaki broj unosim posebno.
Stavio sam da niz ulaz bude tipa int.
Stavio sam da se ucitavanje podataka vrsi preko scanf.
Stavio sam da broj prebaci u slovo.
Stavio sam izlaz.

Ali ne radi. Posle svega ovoga, sve sam pobrkao. Nista ne razumem.

Hoces li, molim te, da mi ovo malo pojasnis? Sada bas nista ne razumem.

Evo vidi kod.

#include <stdio.h> #include <stdlib.h> int main() {    int i = 0, k;    int ulaz[200];    char izlaz[200];    while(1){    printf("Unesite broj: ");    scanf("%d\n", &ulaz[i++]);    if(ulaz[i] == 'i' || ulaz[i] == 'I')       break;    }        i = 0;    while(ulaz[i] <= 25)       izlaz[i] = ulaz[i++] + 'a';    for(k = 0; k < i; k++)       printf("%d", izlaz[k]);    system("PAUSE");    return EXIT_SUCCESS; }

Znam da nesto nije dobro u prvoj while petlji. Ukucam lepo brojeve i kada ukucam 'i' zanaguje se program i izbaci mi error.

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

Napisano: 01 Mar 2014 11:31

Aj baci pogled na i++ i vidi šta ti uopšte proveravaš u telu petlje if naredbom...

Dopuna: 01 Mar 2014 11:34

Generalno ti je način unosa tupav. Printf izvuci pre petlje, a onda u programu brojeve unosi odvojene razmakom. Na kraji napiši i ili I i lupi enter.

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

Napisano: 01 Mar 2014 11:54

A da li ovaj de kod trebam da ostavim ili da menjam?
Rekao si mi da pogledam to, ali ne razumem kako bih drugacije mogao da stavljam podatke u nizu.

scanf("%d\n", &ulaz[i++]);

Dopuna: 01 Mar 2014 12:03

Promenio sam program kako si mi rekao, ukucao sam brojeve sa razmakom i na kraju upisao i.
Na izlazu mi je izbacio vazdan neke brojeve. Opet ne radi dobro. Vise stvarno ne razumem zasto.

Samo sam ovo promenio.

printf("Unesite brojeve: ");    while(1){    scanf("%d ", &ulaz[i]);    if(ulaz[i] == 'i' || ulaz[i++] == 'I')       break;    }

Dopuna: 01 Mar 2014 12:07

Tu je bila greska jer u zadnjem printfu je bilo stojalo %d, a trebalo je %s. Promenio sam ali sada kada ukucam brojeve izbacuje mi odmah error. Sta sada nije u redu?

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

Napisano: 01 Mar 2014 13:52

Da, da, da, jedna stvar, ne možeš da skeniraš i ili I kada koristiš konverziju %d. Smile I ja sam se malo prešao. No, ona petlja svakako radi: vasa.93 ::while (ulaz[i] != '\0')       izlaz[i] = ulaz[i++] - 'a';while (ulaz[i] <= 25)       izlaz[i] = ulaz[i++] + 'a';Dakle, obrnuto od oduzimanja je sabiranje... smešak Znači, izlazi se iz petlje kada se naiđe na broj veći od 25, pošto za takve brojeve ne postoji odgovarajući karakter.

Dopuna: 01 Mar 2014 13:53

I još jednom, nauči da koristiš dibager. Mnogo je bolje da jedan primer/zadatak naučiš i razumeš u potpunosti nego da stalno štancaš nove programe za koje i ne znaš kako u potpunosti funkcionišu. Wink

Dopuna: 01 Mar 2014 14:18

I ne zaboravi da zatvoriš string na kraju... Smile

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

Prepravio sam sve i stavio da kada naidje na broj 50, da prekine petlju. Ali mi na izlazu idalje ne izbacuje dobre rezultate. Kao da se petlja u programu ne prekine i da traje beckonacno.

Evo ti kod da vidis.
#include <stdio.h> #include <stdlib.h> int main() {    int i = 0, k;    int ulaz[200];    char izlaz[200];    printf("Unesite brojeve: ");    while(1){    scanf("%d ", &ulaz[i]);    if(ulaz[i++] == 50)       break;    }        i = 0;    while(ulaz[i] <= 25)       izlaz[i] = ulaz[i++] + 'a';    for(k = 0; k < i; k++)       printf("%s", izlaz[k]);    system("PAUSE");    return EXIT_SUCCESS; }

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

while(1){    scanf("%d ", &ulaz[i]);    if(ulaz[i++] == 50)       break;    }Nije ti potreban razmak kod pojedinačne ulazne konverzije. Treba da bude samo %d, bez razmaka posle.

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

Kada sam izbrisao taj razmak, odmah mi posle unosa izbacuje izlaz, ali ne dobar. Prvo mi izbaci slova, koja treba, a onda izbacuje nesto, ne znam ni ja sta. Vazdan neke znakove.

Rekao si mi da zatvorim string, ali kako da uradim to?

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

Čime se završavaju stringovi u C-u? Aj razmisli. Very Happy

Ko je trenutno na forumu
 

Ukupno su 506 korisnika na forumu :: 5 registrovanih, 1 sakriven i 500 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: havoc995, hyla, Karla, Mixelotti, Shilok