[ easyyu @ 20.05.2006. 04:33 ] @
Ovako..potrebno je izvrsiti unos studenata po imenu i prezimenu br indeksa i br poena ostvarenih na ispitu.Prilikom zavrsetka unosa treba da se izlistaju oni studenti koji imaju najveci broj poena pa nadalje (po opadajucem redesledu)..ja ovaj zafdatak imam resen u zbirci ali bez f-ja.Ja sam krenu da radim sa f-jama (dve f-je,jedna za unos a druga za ispis) i kod radi,ne zapucava se ali ispisuje totalno nebulozne karaktere prilikom ispisa..Zamolio bih vas da me ispravite gde gresim,odnosno,da li je uopste mogue na ovaj nacin resiti zadatak.Ako ne zasto nije moguce?
Dopisite mi to komentarima
Hvala unapred..
A evo i koda:

Code:
#include<stdio.h>
#include<stdlib.h>
#include<conio.h>
#include<ctype.h>
#include<string.h>

/******************************************************************************************************************/
//PROTOTIP F-JE
int upis(void);
void ispis(int br_studenata);
/******************************************************************************************************************/

typedef struct student{ char  prezime[15];
            char  ime[15];
            char  br_ind[5];
            int   poeni;
              }Tstudent;
                    
void main (void) {


  int br_studenata;
  char izbor;
  do{
    printf("\t\t\tStatistika studenata\n\n\n");
    printf("Izaberi opciju:\n1) Upis novih studenata\n2) Listanje\n3) Kraj\nTvoj izbor je:");
    do{
      izbor=getche();
    }while((izbor!='1')&&(izbor!='2')&&(izbor!='3'));
  
    switch(izbor) {
      case '1':br_studenata=upis();
               break;
      case '2':ispis(br_studenata);
           break;
      case '3':exit(1);
    }
  }while(izbor!='3');
}
/******************************************************************************************************************/
//F-ja ITN UPIS(VOID) (VRACA BROJ STUDENATA KOJI JE UNET)
int upis(void) {
  Tstudent jstudent[50];//jstudent mi predstavlja jednog studenta!
  char pom1[15],pom2[5];
  char c='1';
  int k,p,i=0;//i je ustvari brojac studenata

  while(c=='1') {
    clrscr();
    printf("Trenutno je uneto %d studenata\n",i);
    printf("Unesi prezime studenta:");
    scanf("%s",&jstudent[i].prezime);

    printf("Unesi ime studenta:");
    scanf("%s",&jstudent[i].ime);
    printf("Uneo si ime:%s\n",jstudent[i].ime);
    //UKOLIKO POSTOJI BR_IND PONOVI UNOS UKOLIKO NE UBACI TEKUCI I IDI DALJE NA SL UNOS
    k=0;
    do {
      printf("Unesi broj indeksa:");
      scanf("%s",&jstudent[i].br_ind);
      for(p=0;p<i;p++) {
    if( strcmp(jstudent[p].br_ind,jstudent[i].br_ind)==0 ) {
      printf("Ovaj broj indeksa vec postoji!!!\n");
      k=1;
      break;
    }else k=0;
      }
    }while(k==1);

    printf("Unesi broj osvojenih bodova:");
    do {
      scanf("%d",&jstudent[i].poeni);
      if((jstudent[i].poeni<0)||(jstudent[i].poeni>100)) printf("Vrednost moze biti izmedju 0-100!!!");
    }while(jstudent[i].poeni<0||jstudent[i].poeni>100);

    printf("\nDa li zelis da nastavis sa unosom novih studenta?\n");
    printf("1-DA\n2-NE\nTvoj izbor je:");
    c=getche();
    i++;
    if(c=='2') {
      clrscr();
      break;
    }
  }
  return i;//vrati mi broj koliko sam studenata uneo
}
/******************************************************************************************************************/
//F-ja VOID ISPIS
void ispis(int broj_st){
  int i,j,n,pom;
  char prezime1[15],ime1[15],br_ind1[5];
  Tstudent jstudent[50];
  clrscr();
  for(i=0;i<broj_st;i++) {
    for(j=i+1;j<broj_st;j++) {
      if(jstudent[i].poeni<jstudent[j].poeni) {
        //SORTIRAJU SE POENI
    pom=jstudent[i].poeni;
    jstudent[i].poeni=jstudent[j].poeni;
    jstudent[j].poeni=pom;
    //ISTO TAKO MORAM DA PREMESTAM I PREZIME I IME I BR IND
    strcpy(prezime1,jstudent[i].prezime);
    strcpy(jstudent[i].prezime,jstudent[j].prezime);
    strcpy(jstudent[j].prezime,prezime1);

    strcpy(ime1,jstudent[i].ime);
    strcpy(jstudent[i].ime,jstudent[j].ime);
    strcpy(jstudent[j].ime,ime1);

    strcpy(br_ind1,jstudent[i].br_ind);
    strcpy(jstudent[i].br_ind,jstudent[j].br_ind);
    strcpy(jstudent[j].br_ind,br_ind1);
      }
    }
  }
  printf("Poeni su sortirani a broj unetih studenata je %d:\n",broj_st);
  for(i=0;i<broj_st;i++) {
    printf("%d\t%s\t%s",jstudent[i].poeni,jstudent[i].prezime,jstudent[i].ime);
  }
  getche();
  clrscr();
}
[ klichko @ 20.05.2006. 06:49 ] @
Niz TStudent jstudent[50] si definisao unutar funkcije upis tj. to je lokalna promenljiva i svi podatci koje budes unosio nece biti vidljivi izvan same funkcije. TStudent jstudent[50] koji si definisao u funkciji ispis je lokalna promenljiva za tu funkciju i nema nikakve veze sa onom iz funkcije upis. U principu mozes da uradis dve stvari ili da niz definises kao globalnu promenljivu

Code:

typedef struct student{ char  prezime[15];
            char  ime[15];
            char  br_ind[5];
            int   poeni;
              }Tstudent[50];


ili da niz prosledjujes kao argument funkcije, pri cemu bi niz definisao u main-u, i iz funkcija upis i ispis izbacio liniju TStudent jstudent[50]

Code:

void main (void) {

  int br_studenata;
  TStudent jstudent[50]; //dodata linija

  char izbor;
  do{
    printf("\t\t\tStatistika studenata\n\n\n");
    printf("Izaberi opciju:\n1) Upis novih studenata\n2) Listanje\n3) Kraj\nTvoj izbor je:");
    do{
      izbor=getche();
    }while((izbor!='1')&&(izbor!='2')&&(izbor!='3'));
  
    switch(izbor) {
      case '1':br_studenata=upis(jstudent); //dodata linija
               break;
      case '2':ispis(br_studenata, jstudent); //dodata linija
           break;
      case '3':exit(1);
    }
  }while(izbor!='3');
}
[ easyyu @ 21.05.2006. 05:05 ] @
Hvala ti puno na pomoci..Isprobao sam resenje pod 2) i radi,a cak sam i shvatio... :)