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.
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.
@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.
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;
}
@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.. -.-
vBulletin® v3.8.7, Copyright ©2000-2024, vBulletin Solutions, Inc.