PDA

Prikaži potpunu verziju : Program u C-u


mije_drobnjakl
12.6.2008, 17:53
Da li neko može da mi napiše program u C-u koji radi sledeće:
U datoteci ISPIT.DAT upisani su rezultati nekog ispita, u svakom redu podaci o jednom kandidatu u obliku: sifra pol prezime ime bodovi.Pošto rezultati nisu sortirani, treba napraviti program koji pravi dvije rang liste kandidata.Rang listu muških kandidata upisuje u datoteku M.DAT, a ženskih u Z.DAT, sortirajući kandidate po ostvarenim bodovima u opadajućem redosledu. U slučaju da ima više kandidata sa istim brojem bodova, dodatni kriterijum za sortiranje je abecedni red. Podatke upisati u sledećem obliku: sifra prezime ime bodovi. Hvala svima koji mi pomognu da uradim zadatak treba mi na ispitu za faks.

allokin
12.6.2008, 19:53
Mogao bih veoma lako da ti napravim to ali ne pada mi na pamet, pomuci se malo.

A svako ko zeli da mu da program na tacni neka razmisli malo bolje pre toga.

Patton
12.6.2008, 20:30
@alokin
Ne znam zasto se ti javljas kada si ti juce ovde (http://www.sk.rs/forum/showthread.php?t=30855) trazio isto program na tacni.

Kada je nastao podforum "Programiranje", bila je zamisao da korisnici u tom delu foruma postuju neke svoje radove, tutorijale, razmenjuju interesantne sajtove za dev...itd. Ok, naravno da moze da se trazi i pomoc; ali da to ne budu neka banalna pitanja kao sto su na primer ova poslednja dva slucaja. Ljudi naucite vise da citate dokumentaciju uz svaki programski jezik i za svaku platformu na kojoj radite. Ne ocekujte da ce vam ovde neko raditi domace zadatke, seminare i resavati zadatke za ispit. To zaboravite. Vec knjigu u ruke i na ucenje. Pa valjda vas uce nesto i u tim skolama ili fakultetima?

MilosTintor
12.6.2008, 21:06
Mogao bih veoma lako da ti napravim to ali ne pada mi na pamet, pomuci se malo.

A svako ko zeli da mu da program na tacni neka razmisli malo bolje pre toga.

zasto pisete ovakve postove u opste. Alokin ti imas 13 godina i nijedan problem u zivotu dok je decko koji je trazio pomoc 10 godina stariji . I cujes treba mu za faks . Zasto morate \ moras biti toliko zli\zao pa necete\neces da pomognete\pomognes ako znate\znas. Ko konta post svaka cast:kreza:.

Inace @mije_drobnjakl ja bi rado pomogao ali nemam pojma C.

Stevvan
13.6.2008, 0:14
Pretpostavljam da umes da baratas, sa input/output-om ali da ti problem predstavlja sortiranje. Sto se sortiranja tice postoji vise nacina, najprostiji je bubble sort, i mislim da bi ti on bio dovoljan za ovaj zadatak, medjutim stdlib sadrzi dosta bolji algoritam quick sort.

Pre svega napravis strukturu za studenta:

typedef struct
{
char pol[7];
char ime[20];
char prezime[20]; //ime i prezime mogu i zajedno
int bodovi;//bolje bi bilo 'unsigned int' ali mozda imate i negativne poene :D
char sifra[20]; //pretpostavljam da sifra sadrzi i brojeve i slova
}Student;



Posto ne znas koliko studenata moze da bude u ISPIT.DAT, preporucio bih ti da napravis 2 dinamicka array-a koji npr mogu da sadrze po 300 studenata (za muske i zenske). Prilikom ucitavanja ubacujes gde trebaju muski a gde zenski). Posle koristi qsort algoritam koji sam prethodno naveo. Pogledaj ovde kako ga mozes koristiti http://www.cplusplus.com/reference/clibrary/cstdlib/qsort.html a nacices i nesto bolje ako malo potrazis.



#include <stdlib.h>
#include <stdio.h>


typedef struct
{
char pol[7];
char ime[20];
char prezime[20]; //ova 2 mogu i zajedno
int bodovi;//bolje bi bilo 'unsigned int' ali mozda imate i negativne poene :D
char sifra[20]; //pretpostavljam da sifra sadrzi i brojeve i slova
}Student;

int sort(const void *a, const void *b)
{
Student *s1 = (Student*)a;
Student *s2 = (Student*)b;
if (s1->bodovi > s2->bodovi)
return -1;
if (s1->bodovi < s2->bodovi)
return 1;
//u slucaju da imaju isto bodova
int count = 0;
while (s1->prezime[count] == s2->prezime[count] && s1->prezime[count] != '\0' && s2->prezime[count] != '\0')
{
count +=1;
}
if (s1->prezime[count] != '\0' && s2->prezime[count] != '\0')
{
if (s1->prezime[count] > s2->prezime[count])
return 1;
if (s1->prezime[count] < s2->prezime[count])
return -1;
}
//za ime u slucaju da je prezime isto
count = 0;
while (s1->ime[count] == s2->ime[count] && s1->ime[count] != '\0' && s2->ime[count] != '\0')
{
count +=1;
}
if (s1->ime[count] > s2->ime[count])
return 1;
return -1;
}

int main()
{
FILE *input, *output_m, *output_z;
input = fopen("ISPIT.DAT","r");

Student *muski, *zenski;
muski = (Student*)malloc(300*sizeof(Student));
zenski = (Student*)malloc(300*sizeof(Student));

unsigned int mi, zi, c; //broj svih studenata, broj muskih, broj zenskih i variabla koji koristimo kao brojac
mi = zi = 0;
Student student;

while (fscanf(input, "%s %s %s %s %d\n",student.sifra, student.pol, student.prezime, student.ime, &student.bodovi) == 5)
{
if (student.pol[0] == 'm')
{
muski[mi] = student;
mi+=1;
}
else
{
zenski[zi] = student;
zi+=1;
}
}
fclose(input);
qsort(muski, mi, sizeof(Student), sort);
qsort(zenski, zi, sizeof(Student), sort);
output_m = fopen("M.DAT","w");
output_z = fopen("Z.DAT","w");

for (c = 0; c < mi; c++)
{
fprintf(output_m,"%s %s %s %d\n", muski[c].sifra, muski[c].prezime, muski[c].ime, muski[c].bodovi);
}

for (c = 0; c < zi; c++)
{
fprintf(output_z, "%s %s %s %d\n", zenski[c].sifra, zenski[c].prezime, zenski[c].ime, zenski[c].bodovi);
}
fclose(output_m);
fclose(output_z);

free(muski);
free(zenski);
return 0;
}

allokin
13.6.2008, 1:10
@patton, nisam trazio program na tacni, nego samo mali uput.
@milostintor, mozda sam malo preterao u onoj poruci, nisam ja zao nego sam se toliko nagledao svakojakvih ljudi koji ne zele ni malo da se pomuce da bi dosli do cilja da mi je vise muka, a o mojim problemima necemo.. -.-