Imas par nepravilnosti u programu: float g,p,k,o,l,h; , par njih trebaju da budu na int...
Evo ja sam se dohvatio tvog programa i solidno sam se namucio :)
Postavicu dve vervije. V1 ne detektuje slovo i kad se unese slovo program beskonacno ponavlja nesto sto ne treba da radi! Dakle to je obicni programcic.
Druga verzija detektuje slovo ili bilo koji drugi znak i daje programu do znanja o cemu je rec. Ako bi neko zna laksi nacin za detekciju slova bilo bi lijepo kad bi izneo ovde posto me zanima.
Pozdrav!
V1
Code:
//BEZ FUNCKCIJE NE DETEKTUJE SLOVO I TADA NASTAVLJA BESKONACAN RAD
#include <stdio.h>
#include <stdlib.h>
#define mrxx 20
main()
{
char predmet[mrxx][mrxx],p[2+1];
int ocena[mrxx],suma=0;
int i;
float prosek;
printf("****************************************************************************\n");
printf("**** DOBRODOSLI U OBICAN PROGRAM ZA IZRACUNAVANJE SKOLSKOG PROSEKA ****\n");
printf("**** ZA OSNOVNU I SREDNJU SKOLU. U PROGRAMU JE ZABRANJENO UNOSITI ****\n");
printf("**** AKO UNESETE OCENE MANJE OD 1 ILI 5 MORACETE OSTVARITI PONOVNI UNOS ****\n");
printf("****************************************************************************\n");
while(1)
{
do
{
printf("\UNESI BROJ PREDMETA IZ KOJIH ZELIH DA RACUNAR PROSEK, AKO UNESES \"0\" IZLAZIS IZ PROGRAMA:\n");
scanf("%d",&p);
}
while ( p<0 || p>17 );
if(p==0)
break;
fflush(stdin);
for ( i=0;i<p;i++ )
{
printf("Unesi %d predmet:\n",i+1);
gets(predmet[i]);
fflush (stdin);
}
printf("\nUNOS OCENA:\n");
for (i=0;i<p;i++)
{
printf("Unesi celobrojnu ocenu od 1 do 5 iz predmeta %s : ", predmet[i]);
scanf("%d",&ocena[i]);
printf("\n");
if(ocena[i]<1 || ocena[i]>5)
{
printf("Pogresna ocena\n");
printf("Unesite ponovo");
i--;
}
}
for (i=0;i<p;i++)
suma += ocena[i] ;
prosek = (float)suma / p ;
printf("\nPredmete i ocena koje ste uneli su:\n");
for(i=0;i<p;i++)
{
printf("%d. %s\t%d.\n",i+1,predmet[i],ocena[i]);
}
printf("\nA prosek je : %.2f\n\n",prosek);
}
}
V2
Code:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define mrxx 17
int broj(char c[3]); //funkcija za ispitivanje prolaza petlje
int ocena_(char c[mrxx]);
main()
{
char predmet[mrxx][mrxx],m[2+1],t,ocena[mrxx][2];
char suma='0';
int k,w;
int i,p;
float prosek,g;
printf("**********************************************************************************\n");
printf("**** DOBRODOSLI U OBICAN PROGRAM ZA IZRACUNAVANJE SKOLSKOG PROSEKA ****\n");
printf("**** PROGRAM JE ZA OSNOVNU I SREDNJU SKOLU. MAKSIMALNI BR. PREDMETA JE 17 ****\n");
printf("**** AKO UNESETE OCENE MANJE OD 1 ILI 5 MORACETE OSTVARITI PONOVNI UNOS ****\n");
printf("**********************************************************************************\n");
while(1) //neprestano ponavljanje programa
{
do
{
printf("\nUNESI BROJ PREDMETA IZ KOJIH ZELIH DA RACUNAR PROSEK, AKO UNESES \"0\" IZLAZIS IZ PROGRAMA:\n");
scanf("%s",&m);
t=broj(m);//String m ide u funkciju
}
while ( m[0]<48 || m[0]>57 || t==0); //Ako "m" nije broj ponavljaj program
//I ako t==0 ponavljaj program
if(t==1)
p=m[0]-48; //Ako ste uneli jednocifren broj
if(t==2)
p = ((m[0]-48)*10)+(m[1]-48); //Ako ste uneli dvocifren broj
if(p==0)
break;
fflush(stdin);
for ( i=0;i<p;i++ )
{
printf("Unesi %d predmet:\n",i+1);
gets(predmet[i]);
fflush (stdin);
}
printf("\nUNOS OCENA:\n");
for (i=0;i<p;i++)
{
printf("Unesi celobrojnu ocenu od 1 do 5 iz predmeta %s : ", predmet[i]);
gets(ocena[i]);
printf("\n");
k=ocena_(ocena);
if(ocena[i][0]<49 || ocena[i][0]>53 || k==0 )
{
printf("Pogresna ocena\n");
printf("Unesite ponovo\n");
i--;
}
fflush(stdin);
}
suma = '0';
suma = suma-48;
for (i=0;i<p;i++)
suma = suma + (ocena[i][0]-48) ;
prosek = (float) suma / p ;
printf("\nPredmete i ocena koje ste uneli su:\n");
printf("\n PREDMET\t\tOCENA\n\n");
for(i=0;i<p;i++)
{
printf("%d. %s",i+1,predmet[i]);
printf("\t\t\t%s\n",ocena[i]);
}
printf("\nA prosek je : %.2f\n\n",prosek);
}
}
int broj(char c[3]) //funkcija za ispitivanje prolaza iz petlje
{
int r=0,l;
l=strlen(c);
if (l>1 && l<=2) //Ako ste uneli dvocifren broj
{
if(c[0]>49 || c[1]>55) //Ako taj dvocifreni nije u opsegu 1-17 r=0, a tamo t=0
r=0;
else
r=2; //Ako je u opsegu program nastavlja dalje ali daje r=2 tj. t=2
//da znamo da je rec o dvocifrenom broju
}
if (l==1)
{
r = 1; //Ovde je r=1 tj. t=1 daje do znanja da je unet jednocifren broj
}
if (l>2)
r=0;
return r; //Funckija vraca odgovarajucu vrednost
}
int ocena_(char c[mrxx][2])
{
int i,l,r;
l=strlen(c);
if(l>1)
r=0;
if(l==1)
r=1;
return r;
}