Pomoć oko zadatka- Padezi.c

poruka: 16
|
čitano: 3.170
|
moderatori: XXX-Man, vincimus
1
+/- sve poruke
ravni prikaz
starije poruke gore
10 godina
neaktivan
offline
Pomoć oko zadatka- Padezi.c

Molim pomoć oko zadnjeg printf-a, znači želim da ispis bude samo GENITIV mnozine, a ukoliko je broj negativan da ne ispisuje to isto, ovdje (u zadnjem printf-u)sam morala staviti taj duži tekst jer ne znam, kako da bude točno, drugačije.
Može li se možda ubaciti while petlja npr. while (broj<0) printf("broj je negativan") ili kako već to točno ide?  Ima li netko bolje rješenje?

 

 

/*
Zadatak: U hrvatskom jeziku uz glavne brojeve dolazi imenica u odgovarajucem padezu koji
ovisi o broju uz koji se nalazi (npr. 101 patuljak, 33 patuljka, 77
patuljaka).

Pravila za odredjivanje padeza su:

* imenica je u nominativu jednine, ako je zadnja znamenka 1, ali
zadnje dvije nisu 11

* imenica je u genitivu jednine u ova tri slucaja:

* ako je zadnja znamenka broja 2, ali zadnje dvije nisu 12
* ako je zadnja znamenka broja 3, ali zadnje dvije nisu 13
* ako je zadnja znamenka broja 4, ali zadnje dvije nisu 14

* imenica je u genitivu mnozine u svim ostalim slucajevima

Napisati program koji ce ucitati broj s tipkovnice, provjeravati da li je
pozitivan i ako je, ispisati padez koji uz njega ide, npr. za uneseni
broj 32 treba ispisati “Genitiv jednine”.
*/

 

#include<stdio.h>

 

int main(){

 

unsigned zadnjaZnamenka;
unsigned zadnjeDvijeZnamenke;

int broj;

 

printf("Unesite neki cijeli broj: ");
scanf("%d",&broj);

 

zadnjaZnamenka = broj % 10;
zadnjeDvijeZnamenke = broj % 100;

 

if (broj < 0) {printf("Broj je negativan!\n");}

if(zadnjaZnamenka == 1 && zadnjeDvijeZnamenke != 11) printf("NOMINATIV jednine!\n");
if(zadnjaZnamenka == 2 && zadnjeDvijeZnamenke !=12 || zadnjaZnamenka == 3 && zadnjeDvijeZnamenke != 13
|| zadnjaZnamenka == 4 && zadnjeDvijeZnamenke != 14) printf("GENITIV jednine!\n");
else  //kako izbjeci ovaj ispis, a da ukoliko je brojka negativna ne ispisuje i GENITIV množine??
printf("Ukoliko je negativan nije GENITIV mnozine,\n ukoliko je pozitivan je GENITIV mnozine!\n");

 

return 0;
}

Moj PC  
0 0 hvala 0
17 godina
offline
Pomoć oko zadatka- Padezi.c

Prebaci s IF "petlje" na Switch-case i koristi break.

Ili kod provjere pozitivnosti napravi da se daljni kod izvršava samo ako je pozitivan a ako nije da ne, jer ovako ti se izvrši sve neovisno o tome je li broj negativan.

Twitter: @191x7
Moj PC  
0 0 hvala 0
10 godina
neaktivan
offline
Re: Pomoć oko zadatka- Padezi.c
191x7 kaže...

Prebaci s IF "petlje" na Switch-case i koristi break.

Ili kod provjere pozitivnosti napravi da se daljni kod izvršava samo ako je pozitivan a ako nije da ne, jer ovako ti se izvrši sve neovisno o tome je li broj negativan.

Hvala na savjetu. Ako možeš poslati kod bila bih ti zahvalna. Vrlo rado bi to sama probala napraviti ali tek sam u procesu učenja i zasad to ne znam napraviti jer mi je to znanstvena fantastika. :)  

Postoji li i drugačiji način? 

 

17 godina
offline
Pomoć oko zadatka- Padezi.c

Da, postoji jedan jako dobar nacin, recimo knjiga imena Demistificirani C++ ili ako hoces nesto kracu C++ za apsulutne pocetnike, ta je malo jednostavnija.

Twitter: @191x7
Moj PC  
1 0 hvala 1
10 godina
neaktivan
offline
Re: Pomoć oko zadatka- Padezi.c
191x7 kaže...

Da, postoji jedan jako dobar nacin, recimo knjiga imena Demistificirani C++ ili ako hoces nesto kracu C++ za apsulutne pocetnike, ta je malo jednostavnija.

 ok.   ova druga se zove samo C++ ; naći ću.

17 godina
offline
Re: Pomoć oko zadatka- Padezi.c
Evi kaže...
191x7 kaže...

Da, postoji jedan jako dobar nacin, recimo knjiga imena Demistificirani C++ ili ako hoces nesto kracu C++ za apsulutne pocetnike, ta je malo jednostavnija.

 ok.   ova druga se zove samo C++ ; naći ću.

 Ne, zove se baš "C++ za apsulutne početnike", to joj je ime.

Twitter: @191x7
17 godina
offline
Pomoć oko zadatka- Padezi.c

Evo ti malo za razmisljanje; nisam provrtio u C-u jer ga nemam instalirano.

 

/*
Zadatak: U hrvatskom jeziku uz glavne brojeve dolazi imenica u odgovarajucem padezu koji
ovisi o broju uz koji se nalazi (npr. 101 patuljak, 33 patuljka, 77
patuljaka).
Pravila za odredjivanje padeza su:
* imenica je u nominativu jednine, ako je zadnja znamenka 1, ali
zadnje dvije nisu 11
* imenica je u genitivu jednine u ova tri slucaja:
* ako je zadnja znamenka broja 2, ali zadnje dvije nisu 12
* ako je zadnja znamenka broja 3, ali zadnje dvije nisu 13
* ako je zadnja znamenka broja 4, ali zadnje dvije nisu 14
* imenica je u genitivu mnozine u svim ostalim slucajevima
Napisati program koji ce ucitati broj s tipkovnice, provjeravati da li je
pozitivan i ako je, ispisati padez koji uz njega ide, npr. za uneseni
broj 32 treba ispisati “Genitiv jednine”.
*/

#include<stdio.h>

int main(){

int zadnjaZnamenka=0; //nemoj tek tako koristiti unsigned varijable, svasta se moze dogoditi
int zadnjeDvijeZnamenke=0; //dodijeli varijablama neku pocetnu vrijednost, tako ces cesto izbjeci probleme
int broj=0;

printf("Unesite neki cijeli broj: ");
scanf("%d",&broj);

if (broj < 0) {printf("Broj je negativan!\n");} //komentiraj kod sto vise; recimo ovdje ce ispisati ako je broj negativan

else { //a ako broj nije negativan vrtjeti ce "else" dio, dakle provjeravati dalje

zadnjaZnamenka = broj % 10;
zadnjeDvijeZnamenke = broj % 100;

if(zadnjaZnamenka == 1 && zadnjeDvijeZnamenke != 11) {printf("NOMINATIV jednine!\n");} //ovaj dio ti je vjerojatno jasan
else //opet jedan "else" za situacij uda gornji uvijet nije ispounjen da se trazi dalje
{ if(zadnjaZnamenka == 2 && zadnjeDvijeZnamenke != 12 || zadnjaZnamenka == 3 && zadnjeDvijeZnamenke != 13
|| zadnjaZnamenka == 4 && zadnjeDvijeZnamenke != 14) {printf("GENITIV jednine!\n");} //jos jedan uvjet
else {printf("GENITIV jednine");} //i ovaj zadnji "else" ti je ako nije zadovoljen nijedan od proslih uvjeta (osim onog o pozitivnom broju)

//else //kako izbjeci ovaj ispis, a da ukoliko je brojka negativna ne ispisuje i GENITIV množine??
printf("Ukoliko je negativan nije GENITIV mnozine,\n ukoliko je pozitivan je GENITIV mnozine!\n"); //ne znam cemu ti ovaj dio koda sluzi, ali ostavio sam ga

return 0;
}

/*umjesto int main() pa u njemu return 0 mozes koristiti void main() pa onda ne treba return dio.*/

Twitter: @191x7
Moj PC  
0 0 hvala 1
10 godina
neaktivan
offline
Re: Pomoć oko zadatka- Padezi.c
191x7 kaže...

Evo ti malo za razmisljanje; nisam provrtio u C-u jer ga nemam instalirano.

 

/*
Zadatak: U hrvatskom jeziku uz glavne brojeve dolazi imenica u odgovarajucem padezu koji
ovisi o broju uz koji se nalazi (npr. 101 patuljak, 33 patuljka, 77
patuljaka).
Pravila za odredjivanje padeza su:
* imenica je u nominativu jednine, ako je zadnja znamenka 1, ali
zadnje dvije nisu 11
* imenica je u genitivu jednine u ova tri slucaja:
* ako je zadnja znamenka broja 2, ali zadnje dvije nisu 12
* ako je zadnja znamenka broja 3, ali zadnje dvije nisu 13
* ako je zadnja znamenka broja 4, ali zadnje dvije nisu 14
* imenica je u genitivu mnozine u svim ostalim slucajevima
Napisati program koji ce ucitati broj s tipkovnice, provjeravati da li je
pozitivan i ako je, ispisati padez koji uz njega ide, npr. za uneseni
broj 32 treba ispisati “Genitiv jednine”.
*/

#include<stdio.h>

int main(){

int zadnjaZnamenka=0; //nemoj tek tako koristiti unsigned varijable, svasta se moze dogoditi
int zadnjeDvijeZnamenke=0; //dodijeli varijablama neku pocetnu vrijednost, tako ces cesto izbjeci probleme
int broj=0;

printf("Unesite neki cijeli broj: ");
scanf("%d",&broj);

if (broj < 0) {printf("Broj je negativan!\n");} //komentiraj kod sto vise; recimo ovdje ce ispisati ako je broj negativan

else { //a ako broj nije negativan vrtjeti ce "else" dio, dakle provjeravati dalje

zadnjaZnamenka = broj % 10;
zadnjeDvijeZnamenke = broj % 100;

if(zadnjaZnamenka == 1 && zadnjeDvijeZnamenke != 11) {printf("NOMINATIV jednine!\n");} //ovaj dio ti je vjerojatno jasan
else //opet jedan "else" za situacij uda gornji uvijet nije ispounjen da se trazi dalje
{ if(zadnjaZnamenka == 2 && zadnjeDvijeZnamenke != 12 || zadnjaZnamenka == 3 && zadnjeDvijeZnamenke != 13
|| zadnjaZnamenka == 4 && zadnjeDvijeZnamenke != 14) {printf("GENITIV jednine!\n");} //jos jedan uvjet
else {printf("GENITIV jednine");} //i ovaj zadnji "else" ti je ako nije zadovoljen nijedan od proslih uvjeta (osim onog o pozitivnom broju)

//else //kako izbjeci ovaj ispis, a da ukoliko je brojka negativna ne ispisuje i GENITIV množine??
printf("Ukoliko je negativan nije GENITIV mnozine,\n ukoliko je pozitivan je GENITIV mnozine!\n"); //ne znam cemu ti ovaj dio koda sluzi, ali ostavio sam ga

return 0;
}

/*umjesto int main() pa u njemu return 0 mozes koristiti void main() pa onda ne treba return dio.*/

 

Kako znaš da ti kod valja ako ga nisi debuggirao? 
Stvar je u tome da kada ja učitam neki negativan broj program ga gleda kao nešto što nije u ovim IF uvjetima i zato ga usmjerava na ELSE što odmah podrazumijeva ispis : GENITIV mnozine!

Želim samo dobiti rješenje sa uvjetom da ako je učitani broj manji od 0 odnosno ako je učitani broj negativan da ovaj program ispiše poruku : Učitani broj je negativan! te da izađe iz programa. 
Pokušala sam to sa prvim IF-om ali program to nije napravio već je nakon unešenog negativnog broja ponovno poslušao ELSE i ispisao: GENITIV mnozine!

Probala sam i ovako:

#include<stdio.h>

int main(){

unsigned zadnjaZnamenka;
unsigned zadnjeDvijeZnamenke;
unsigned broj=0;

printf("Unesite neki cijeli broj: ");
scanf("%u",&broj);

zadnjaZnamenka = broj % 10;
zadnjeDvijeZnamenke = broj % 100;

if (broj < 0) {printf("Broj je negativan!\n"); return 0;}

if(zadnjaZnamenka == 1 && zadnjeDvijeZnamenke != 11) printf("NOMINATIV jednine!\n");
if(zadnjaZnamenka == 2 && zadnjeDvijeZnamenke !=12 || zadnjaZnamenka == 3 && zadnjeDvijeZnamenke != 13
|| zadnjaZnamenka == 4 && zadnjeDvijeZnamenke != 14) printf("GENITIV jednine!\n");
else
printf("GENITIV mnozine!\n");
return 0;
}


 

Ali program i dalje dozvoljava učitani negativni broj, zar nebi trebao unsigned značiti da nema predznaka ispred broja? Zašto mi onda program dozvoljava da učitam negativan broj, npr. -5 ?




10 godina
neaktivan
offline
Re: Pomoć oko zadatka- Padezi.c

ahaaa , vidi sliku- tako radi, bravo Ivane 191x7!   a sad, da li kužim? baš i ne kužim, probat ću skužit zašto je to tako. Muči me malo logika... 


#include<stdio.h>

int main(){

int zadnjaZnamenka=0; //nemoj tek tako koristiti unsigned varijable, svasta se moze dogoditi
int zadnjeDvijeZnamenke=0; //dodijeli varijablama neku pocetnu vrijednost, tako ces cesto izbjeci probleme
int broj=0;

printf("Unesite neki cijeli broj: ");
scanf("%d",&broj);

zadnjaZnamenka = broj % 10;
zadnjeDvijeZnamenke = broj % 100;

if (broj < 0) {printf("Broj je negativan!\n"); return 0;}
else{

if(zadnjaZnamenka == 1 && zadnjeDvijeZnamenke != 11) printf("NOMINATIV jednine!\n");
if(zadnjaZnamenka == 2 && zadnjeDvijeZnamenke !=12 || zadnjaZnamenka == 3 && zadnjeDvijeZnamenke != 13
|| zadnjaZnamenka == 4 && zadnjeDvijeZnamenke != 14) printf("GENITIV jednine!\n");
else
printf("GENITIV mnozine!\n");
return 0;}
}

17 godina
offline
Re: Pomoć oko zadatka- Padezi.c

Pa ne moram kod kompajlirati da bih znao jel korektan ili nije, a to ako negdje ima nekakav tipfeler to se lako ispravi - glavno je da logika programa štima.

 

Što točno bude kada se proba kompajlirati i izvršiti ova moja inačica koda? Baca neku grešku (ako da, na kojem redu, kakvu)?

 

E da, ovaj prvi "return 0" u prvom "IF"-u ti ne treba. Može praviti probleme jer vraća vrijednost prije nego se izvršavanje main funkcije završi.

Twitter: @191x7
17 godina
offline
Pomoć oko zadatka- Padezi.c

Evo, malo sam ti uredio i skratio kod + sve radi kako treba...

 

#include<stdio.h>

int main(){

int broj=0;
int zZ=0; //zZ = zadnja Znamenka
int z2Z=0; // z2Z = zadnje 2 Znamenke

printf("Unesite neki cijeli broj: ");
scanf("%d",&broj);

if (broj<0)
{ printf("\nBroj je negativan!\n"); }

else
{
zZ = broj % 10;
z2Z = broj % 100;
if (zZ == 1 && z2Z != 11)
{ printf("NOMINATIV jednine!\n"); }
else if ((zZ == 2 && z2Z != 12) || (zZ == 3 && z2Z != 13) || (zZ == 4 && z2Z != 14))
{ printf("GENITIV jednine!\n"); }
else
{ printf("GENITIV jednine"); }
}
return 0;
}

 

 

Forum drastično uneredi kod, daj ga pogledaj ovdje:

http://pastebin.com/GfGEUpRD

Twitter: @191x7
Poruka je uređivana zadnji put sub 5.9.2015 13:44 (191x7).
Moj PC  
0 0 hvala 1
17 godina
offline
Pomoć oko zadatka- Padezi.c

Ni meni se ne sviđa to nasilno prekidanje logike programa sa return, to se radi kod rekurzija ili funkcija koje pozivamo iz maina, gdje programska logika to stalno zahtijeva kod rekurzija ili povremeno kod drugih funkcija. Main funkcija je entry point programa i ona komunicira sa OS,  program se u mainu prekida jedino u slučajevma greške, npr kad ne možemo alocirati memoriju i tada program šalje poruku OS preko return 1 da nije sve prošlo OK, kad na kraju programa funkcija main vrati 0 sa return 0, to je poruka OS da je sve prošlo OK.

Ovdje jednostavno treba pustiti logiku programa da odradi svoje preko if else if  naredbi.

A možemo ovdje ponešto i skratiti, pošto postoji pravilnost. (nisam nikad prije skužio da i u sintaksi hrvatskog postoji matematička pravilnost)

 

#include<stdio.h>


int main()
{
   int broj, jedna, dvije;
   scanf_s("%d", &broj);
   jedna = broj % 10;
   dvije = broj % 100;
   if (broj < 0) printf("Negativan broj\n");
   else if ((jedna > 4 || jedna == 0) || (dvije > 10 && dvije < 15))
      printf("Genitiv mnozine\n");
   else if (jedna != 1) printf("Genitiv jednine\n");
   else printf("Nominativ\n");
   return 0;
}

Poruka je uređivana zadnji put sub 5.9.2015 15:33 (Floki).
 
1 0 hvala 0
17 godina
offline
Re: Pomoć oko zadatka- Padezi.c

 

Forum drastično uneredi kod, daj ga pogledaj ovdje

 Instaliraj FF

Otvori forum  sa FF

Napiši kod u IDE

Copy koda iz IDE

Namjesti text editor foruma na Kod

Paste koda u text editor foruma

 

I to je sve.

Poruka je uređivana zadnji put sub 5.9.2015 14:48 (Floki).
10 godina
neaktivan
offline
Re: Pomoć oko zadatka- Padezi.c

ja se vama divim kak vi to kužite... moram fakat puno učit! 

17 godina
offline
Re: Pomoć oko zadatka- Padezi.c
Evi kaže...

ja se vama divim kak vi to kužite... moram fakat puno učit! 

 Nismo mi ništa posebno, malo vježbe i to je to, vremenom se dođe i do efikasnijih rješenja.

Dakle, tražila si savjet, pa evo ti savjeta, što više vježbaj, nastoj što više zadataka riješiti samostalno, a ono što ne uspiješ riješiti, na rješenjima uči.

 

17 godina
offline
Re: Pomoć oko zadatka- Padezi.c
Evi kaže...

ja se vama divim kak vi to kužite... moram fakat puno učit! 

 4 godine Pascala u srednjoj, 5+ godina studija računarstva i još tak neke sitnice sa strane...

Twitter: @191x7
1
Nova poruka
E-mail:
Lozinka:
 
vrh stranice