Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

Primer iz Krausove knjige

[es] :: C/C++ programiranje :: C/C++ za početnike :: Primer iz Krausove knjige

[ Pregleda: 1130 | Odgovora: 2 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

zagor_te_nej
nezaposlen
Novi Sad

Član broj: 299969
Poruke: 12
*.adsl.eunet.rs.



Profil

icon Primer iz Krausove knjige19.12.2012. u 18:31 - pre 137 meseci
#include <stdio.h>
#define DIM 50

int main()
{
while(1){double a[DIM],b[DIM],skal_pro;
int i,n;
printf("\nDuzina vektora(najvise%d):",DIM);
scanf("%d",&n);
if(n<=0 || n>DIM)
break;
printf("Komponente vektora A:");
for(i=0;i<n;scanf("%lf",&a[i++]));
printf("Komponente vektora B:");
for(i=0;i<n;scanf("%lf",&b[i++]));
for(skal_pro=i=0;i<n;i++)skal_pro+=a*b;
printf("Skalarni proizvod A*B:%10.3f\n",skal_pro);

}
return 0;

}
ovaj program računa skalarni proizvod dva vektora,inače primer iz knjige Lasla Krausa izdanje 2006.Jasno mi je sve šta se tu dogadja osim jedne stvari.
Pokušao sam da ga modifikujem tako da mi javi poruku o pogrešno izabranom n iz if naredbe.To sam uradio tako što sam stavio printf izmedju if i break.

Kada stavim n koje je manje od nula ili veće od DIM program mi lepo javlja poruku preko printf naredbe,ali kada unesem korektno n od 1 do 50 program se
prekine sa porukom proces returned......

Zanima me da mi neko objasni zašto se ovo dogadja ili ako je jednostavnije da napiše kod koji će raditi a ja ću već shvatiti gde grešim.
Hvala!




 
Odgovor na temu

plague
Software Developer
Auckland, NZ

Član broj: 46734
Poruke: 623
*.dynamic.sbb.rs.



+373 Profil

icon Re: Primer iz Krausove knjige19.12.2012. u 18:52 - pre 137 meseci
Code (c):

#include <stdio.h>
#define DIM 50

int  main()
{
     while(1)
     {
          double a[DIM],b[DIM],skal_pro;

          int i,n;
          printf("\nDuzina vektora(najvise%d):",DIM);
          scanf("%d",&n);
          if(n<=0 || n>DIM)
          {
               printf("'n' mora biti vece od nula i manje od 50");
               break;
          }
          printf("Komponente vektora A:");
          for(i=0;i<n;scanf("%lf",&a[i++]));
          printf("Komponente vektora B:");
          for(i=0;i<n;scanf("%lf",&b[i++]));
          for(skal_pro=i=0;i<n;i++)skal_pro+=a[i]*b[i];
          printf("Skalarni proizvod A*B:%.3f\n",skal_pro);

     }
     return 0;

}
 

Svaki kod koji se izvrsava unutar for, while ili if treba biti obuhvacen viticastim zagradama { ... } osim u slucaju kada se izvrsava samo jedna linija koda.

Kada si dodao printf ispod if desilo se to da se ta linija izvrsi samo kada je uslov ispunjen, medjutim zbog toga se break; uvek izvrsavao, cak i kada n ima validnu vrednost.
 
Odgovor na temu

zagor_te_nej
nezaposlen
Novi Sad

Član broj: 299969
Poruke: 12
*.adsl.eunet.rs.



Profil

icon Re: Primer iz Krausove knjige19.12.2012. u 19:39 - pre 137 meseci
Hvala,sad mi je sve jasno.
 
Odgovor na temu

[es] :: C/C++ programiranje :: C/C++ za početnike :: Primer iz Krausove knjige

[ Pregleda: 1130 | Odgovora: 2 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.