Pomoć oko zadatka - RazniIspisi.c

Teme vezane za console/GUI programiranje u C/C++ jeziku
9 post(ov)a • Stranica: 1/1.

Pomoć oko zadatka - RazniIspisi.c

PostPostao/la Evi » 10 lis 2015, 22:02

Zna li netko do kraja riješiti ovaj zadatak ali na najosnovniji mogući način? (najosnovniji znači bez korištenja naprednih funkcija u c-u jer pokušavam shvatiti temeljno)

Nešto sam započela i to zasad radi tako da korisnik unosi brojeve(u navedenom rasponu) sve dok ne unese neki znak ili nulu, no trebala bih doći do ispisa najmanjeg, najvećeg, svih unesenih jednoznamenkastih, dvoznamenkastih i troznamenkastih brojeva.



cpp code
/*Omogućite korisniku upisivanje cjelobrojnih vrijednosti u rasponu od -999 do 999 sve dok ne upiše nulu.
Ispišite najveći i najmanji uneseni broj te ispišite:
koliko je bilo jednoznamenkastih brojeva
koliko je bilo dvoznamenkastih brojeva
koliko je bilo troznamenkastih brojeva */

#include<stdio.h>

int main(){

int broj;
int najmanjiBroj;
int najveciBroj;

if (scanf("%d",&broj)!=0) //

{
if (broj>=-999 && broj<=999)
{

do { scanf("%d",&broj);}
while(broj!=0);
}


}

return 0;}

Re: Pomoć oko zadatka - RazniIspisi.c

PostPostao/la gagiD » 10 lis 2015, 22:34

U do bloku to mozes uradit.

Npr. za najveci:
cpp code
if (broj < najmanjiBroj)
najmanjiBroj = broj;

Slicno je i za najveci.
najmanjiBroj inicijaliziras na prvi broj koji se unese.

Za ispitivanje koliko broj ima cifara(u slucaju da su u datom rasponu) koristis nekoliko if-ova.
Ispitas da li je u rasponu (-10, 10), ako da povecas brojac za jednocifrene itd. Imas 3 slucaja.
U ovom zadatku je jednostavnije tako nego generalno rjesenje.

Re: Pomoć oko zadatka - RazniIspisi.c

PostPostao/la Evi » 10 lis 2015, 23:27

Znam kako se traži najmanji broj, npr. ovako:

cpp code
/*trazenje najmanjeg od pet brojeva*/
#include<stdio.h>
int main()
{
int a,b,c,d,e;
int m;
printf("Unesi pet broja odvojena razmakom: \n");
scanf("%d %d %d %d %d",&a,&b,&c,&d,&e);

m=a;

if (b<m)
m=b;
if (c<m)
m=c;
if (d<m)
m=d;
if (e<m)
m=e;
printf("Najmanji od pet brojeva je %d\n",m);
return 0;}

Re: Pomoć oko zadatka - RazniIspisi.c

PostPostao/la Evi » 10 lis 2015, 23:31

Znam i kako dobiti jednocifreni, dvocifreni i trocifreni, ovako:

cpp code
if (broj>=0 && broj<10); {printf("jednoznamenkasti ili jednocifreni"); }
if (broj>=10 && broj<100); {printf("dvoznamenkasti ili dvocifreni"); }
if (broj>=100 && broj<1000); {printf("troznamenkasti ili trocifreni"); }


Ali ne znam kako to znanje primijeniti na ovaj zadatak gdje trebam iz svih učitanih vrijednosti odvojiti to što zadatak traži. To me zanima. Znaš li odgovor?

Re: Pomoć oko zadatka - RazniIspisi.c

PostPostao/la Jasko » 11 lis 2015, 00:48

Evo mog rjesenja:

cpp code
#include<stdio.h>

int main(){

int broj;
int najmanjiBroj = 1000;
int najveciBroj = -1000;
int jednoc = 0;
int dvoc = 0;
int troc = 0;

do {
scanf("%d",&broj);
if(broj != 0 && broj >=-999 && broj <= 999){
if(broj < najmanjiBroj) najmanjiBroj = broj;
if(broj > najveciBroj) najveciBroj = broj;
if(broj > -10 && broj < 10) jednoc++;
if(broj > -100 && broj < 100) dvoc++;
if(broj > -1000 && broj < 1000) troc++;
}
}while(broj!=0);
dvoc-= jednoc;
troc-=(dvoc+jednoc);
printf("Najmanji broj je: %d\n"
"Najveci broj je: %d\n"
"Broj jednocifrenih: %d\n"
"Broj dvocifrenih: %d\n"
"Broj trocifrenih: %d\n",najmanjiBroj,najveciBroj,jednoc,dvoc,troc);


return 0;
}
Postoji 10 vrsta ljudi na zemlji. Oni koji razumiju binarni sistem i oni koji ga ne razumiju!
Posjetite moj YouTube kanal za gledanje za programiranje i druge teme oko računara.

Re: Pomoć oko zadatka - RazniIspisi.c

PostPostao/la gagiD » 11 lis 2015, 00:55

Ovako nekako:

c code
/*Omogućite korisniku upisivanje cjelobrojnih vrijednosti u rasponu od -999 do 999 sve dok ne upiše nulu.
Ispišite najveći i najmanji uneseni broj te ispišite:
koliko je bilo jednoznamenkastih brojeva
koliko je bilo dvoznamenkastih brojeva
koliko je bilo troznamenkastih brojeva */

#include<stdio.h>

int main() {

int broj, najmanjiBroj, najveciBroj, brJ = 0, brD = 0, brT = 0;
short prvi = 1; // mora ovako posto C nema bool-a

while (1) {
scanf("%d",&broj);

if (broj == 0 || broj < -999 || broj > 999)
break; // ako je uslov ispunjen zaustavi petlju

if (prvi) {
najmanjiBroj = najveciBroj = broj; // incijalizacija najmanjeg i najveceg
prvi = 0;
}

if (broj < najmanjiBroj)
najmanjiBroj = broj;

if (broj > najveciBroj)
najveciBroj = broj;

if (broj > 99 || broj < -99)
++brT;
else if (broj > 9 || broj < -9)
++brD;
else
++brJ;
}

printf("Najveci broj: %d \n", najveciBroj);
printf("Najmanji broj: %d \n", najmanjiBroj);
printf("Broj trocifrenih: %d \n", brT);
printf("Broj dvocifrenih: %d \n", brD);
printf("Broj jednocifrenih: %d \n", brJ);

return 0;
}

Re: Pomoć oko zadatka - RazniIspisi.c

PostPostao/la Jasko » 11 lis 2015, 01:07

Evo jos jedno rjesenje, od mene. Dobra stvar u programiranje je sto nema "pravog" rjesenja. Rjesenje je ako funkcionise :)

cpp code
#include<stdio.h>

int main(){

int broj;
int najmanjiBroj = 1000;
int najveciBroj = -1000;
int jednoc = 0;
int dvoc = 0;
int troc = 0;

do {
scanf("%d",&broj);
if(broj != 0){
if(broj >=-999 && broj <=999){
if(broj < najmanjiBroj) najmanjiBroj = broj;
if(broj > najveciBroj) najveciBroj = broj;
if(broj > -10 && broj < 10){ jednoc++;}
else if(broj > -100 && broj < 100){dvoc++;}
else troc++;
} else{
printf("Izasli ste izvan opsega. Trazeni opseg je izmedju -999 i 999. Kraj sa 0!");
}
}
} while(broj!=0);
printf("Najmanji broj je: %d\n"
"Najveci broj je: %d\n"
"Broj jednocifrenih: %d\n"
"Broj dvocifrenih: %d\n"
"Broj trocifrenih: %d\n",najmanjiBroj,najveciBroj,jednoc,dvoc,troc);


return 0;
}
Postoji 10 vrsta ljudi na zemlji. Oni koji razumiju binarni sistem i oni koji ga ne razumiju!
Posjetite moj YouTube kanal za gledanje za programiranje i druge teme oko računara.

Re: Pomoć oko zadatka - RazniIspisi.c

PostPostao/la Evi » 11 lis 2015, 17:57

Hvala puno Gagi i Jasko. Još mi nije posve jasno... hm, sad mene muči to: otkud da se ja sjetim najmanji inicijalizirati na 1000, a najveći na -1000? to me malo zbunilo, a zaboravila sam vas zamoliti da zakomentirate linije koda. Kako si se toga odmah sjetio? Svaka čast. Aha, to je sigurno tako zbog ovog raspona od -999 do 999.
cpp code
int najmanjiBroj = 1000;   //zašto tako?
int najveciBroj = -1000;


Jasko sviđa mi se ovo zadnje rješenje jer djeluje najjednostavnije, samo mi pliz objasni ovaj upit.
Ako je obrnuto onda je krivo, probala sam.
slika

Re: Pomoć oko zadatka - RazniIspisi.c

PostPostao/la Jasko » 11 lis 2015, 18:13

OK pokusat cu jednostavno objasnit.

Hoces da uneses x brojeva u rasponu od -999 i 999. Teoretski najveci moguci broj je 999, a najmanji je -999.

Praksa je da prvi broj koji uneses postavis kao najmanji i istovremeno kao najveci broj. Te svaki naredni koji unosis poredis sa tim brojem, dali je veci od prvog ili manji od prvog i ako jest manji onda je novi najmanji broj taj uneseni, ekvivalentno ide za najveci.

Sad posto ja zelim odmah pri prvom unosu da prvi broj unutar if petlje poostavim kao najveci, odnosno kao najmanji, ti brojevi moraju biti prethodno inicijalizirani, ako nisu onda poprime bilo kakvu vrijednost i ja nemogu kontrolisati taj korak, zato ih ja inicijaliziram.

Eh,zasto najmanji broj inicijalizirati sad sa 1000? Zato sto je to prvi broj izvan opsega, tako da i kad bi teoretski prvi broj koji unesem bio najveci moguci u nasem opsegu ja cu taj prvi broj postaviti da je najmanji, sto mi je i cilj. Ekvivalentno za najveci broj, koji inicijaliziram sa -1000, jer ako je prvi uneseni broj -999 on je u tom trenutku i najveci i najmanji uneseni broj, te cu ga zbog svojih uslova uspijeti tako i postaviti.

ili ovako pogledaj prvi prolaz i ovu liniju koda
cpp code
if(broj < najmanjiBroj) najmanjiBroj = broj;


ako mi je sad najmanjiBroj inicijaliziran sa -1000, a ja imam opseg od -999 i +999, onda ovaj if nece imat effekta niti za jedan uneseni broj jer nemogu unijet jos manji broj nego sto je taj broj vec postavljen, no ako ga postavim na +1000 svaki broj koji unesem prvi ce bit novi najmanji broj, zasigurno, ekvivalentno i za najveciBroj

Valjda je bilo jasno sa ova dva pristupa.

Pozz
Postoji 10 vrsta ljudi na zemlji. Oni koji razumiju binarni sistem i oni koji ga ne razumiju!
Posjetite moj YouTube kanal za gledanje za programiranje i druge teme oko računara.


9 post(ov)a • Stranica: 1/1.

Na mreži

Trenutno korisnika/ca: / i 1 gost.