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

Nedovršen program u C-u

[es] :: C/C++ programiranje :: Nedovršen program u C-u

[ Pregleda: 2938 | Odgovora: 6 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

zbokanov
Tomislavgrad

Član broj: 14604
Poruke: 60
*.tel.net.ba.

ICQ: 146504162


Profil

icon Nedovršen program u C-u25.04.2005. u 09:07 - pre 231 meseci
Treba mi pomoć da dovršim ovaj program (ucim za ispit) (Nedostaje sortiranje i ako unesem ocjenu od onog člana kojeg brišem pa nadalje sve mi se briše):

/*Program koji definira strukturu STUDENT sa članovima ime, prezime, broj indeksa, godina studija,datum izlaska na ispit, kolegij i ocjena. Podaci se smještaju u dinamički povezanu listu sortiranu po prezimenu studenta (i imenu ako je prezime isto). Program daje korisniku izbornik u kojem može odabrati: PRIJAVA ISPITA (unosi se broj indeksa i kolegij, ako takav element već postoji u listi korisnik se na to upozorava, a ako ne postoji unose se i ostali podaci i element smješta u listu)(unose se podaci osim ocjene), ODJAVA ISPITA (unosi se broj indeksa i kolegij, element pronalazi u listi i uklanja iz nje), OCJENA ISPITA (unosi se broj indeksa,
kolegij i ocjena, pronalazi element u listi, upisuje mu se ocjena, element se uklanja iz liste i svi podaci nadodaju u datoteku ispiti.txt), ISPIS SVIH PRIJAVA NA EKRAN (samo ime i prezime i kolegij) te IZLAZ IZ PROGRAMA. Nakon svake akcije korisniku se ponovo daje izbornik, sve dok ne odabere izlaz iz programa*/

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

struct Student
{
char ime[15];
char prezime[35];
int index;
int godina;
char datum[50];
char kolegij[50];
int ocjena;

struct Student *next;
}*student, *glava=NULL;

void Prijava();
void Odjava();
void Ocjena();
void Ispis();

void main()
{
int opcija;

do
{
printf("\nUnesi:\n1 za prijavu ispita\n2 za odjavu ispita\n3 za ocjenu ispita\n4 za ispis svih prijava na ekran\n5 za izlaz iz programa\n\n");
scanf ("%d", &opcija);

switch (opcija)
{
case 1:
Prijava();
break;
case 2:
Odjava();
break;
case 3:
Ocjena();
break;
case 4:
Ispis();
break;
case 5:
break;
default:
printf("\nPogresan unos\n");
break;
}
}while (opcija!=5);
}

void Prijava()
{
int index;
char kolegij[50];

printf("\nBroj indexa --> "); scanf("%d", &index);
printf("Kolegij --> "); scanf("%s", &kolegij);

student=glava;

while (student!=NULL)
{
if(student->index==index && strcmp(student->kolegij,kolegij)==0)
{
printf("\nVec postoji!\n");
return;
}
student = student->next;
}

student=(Student*)malloc(sizeof(Student));

student->index=index;
strcpy(student->kolegij,kolegij);
printf("Ime --> "); scanf("%s", &student->ime);
printf("Prezime --> "); scanf("%s", &student->prezime);
printf("Godina studija -->"); scanf("%d", &student->godina);
printf("Datum izlaska -->"); scanf("%s", &student->datum);

student->next=glava;
glava=student;
}
void Odjava()
{
int index;
char kolegij[50];

printf("\nIndex --> "); scanf("%d", &index);
printf("Kolegij --> "); scanf("%s", &kolegij);

student=glava;

while (student!=NULL)
{
if(student->index==index && strcmp(student->kolegij,kolegij)==0)
{
glava=student->next;
free(student);
printf("\nOdjavljen\n");
return;
}
student=student->next;
}
printf("\nNije pronadjen\n");
}

void Ocjena()
{
int index, ocjena;
char kolegij[50];

printf("\nIndex --> "); scanf("%d", &index);
printf("Kolegij --> "); scanf("%s", &kolegij);
printf("Ocjena --> "); scanf("%d", &ocjena);

student=glava;

while (student!=NULL)
{
if(student->index==index && strcmp(student->kolegij,kolegij)==0)
{
student->ocjena=ocjena;
FILE *dat = fopen("ispiti.txt", "a+");

fprintf(dat, "Ime --> %s \n", student->ime);
fprintf(dat, "Prezime --> %s \n", student->prezime);
fprintf(dat, "Index --> %d \n", student->index);
fprintf(dat, "Kolegij --> %s \n", student->kolegij);
fprintf(dat, "Godina --> %d \n", student->godina);
fprintf(dat, "Datum polaganja --> %s \n", student->datum);
fprintf(dat, "Ocjena --> %d \n", student->ocjena);
fprintf(dat, "===================================\n");
fclose(dat);
printf("\nUpisano u datoteku ispiti.txt");
glava=student->next;
free(student);
printf("\nIzbrisan iz liste!");
return;
}
student=student->next;
}
printf("\nNije pronadjen!");
}
void Ispis()
{
student=glava;

while(student!=NULL)
{
printf("Ime --> %s\n", student->ime);
printf("Prezime --> %s\n", student->prezime);
printf("Kolegij --> %s\n", student->kolegij);
printf("==============================\n");
student=student->next;
}
}

/*nema sortiranja i prekidanje liste prilikom brisanja ocjenjenog*/
You rule this town like God rules the world. You give and you take away.
 
Odgovor na temu

Mihajlo Cvetanović
Beograd

Moderator
Član broj: 37636
Poruke: 1249



+96 Profil

icon Re: Nedovr�en program u C-u25.04.2005. u 12:50 - pre 231 meseci
Citat:
...
printf("Kolegij -- "); scanf("%s", kolegij);
Ne treba kolegij, nego samo kolegij.
Citat:
...
student=(Student*)malloc(sizeof(Student));
Dobra navika je da uvek proveravas povratnu vrednost alokacije. Uvek.
Citat:
student-index=index;
strcpy(student-kolegij,kolegij);
Umesto strcpy bolje je strncpy sa duzinom sizeof(student-kolegij) - 1, i postavljanjem student-kolegij[sizeof(student-kolegij) - 1] na ''. Treba izbegavati strcpy kad god je moguce.
Citat:
...
void Odjava()
....
while (student!=NULL)
{
if(student-index==index strcmp(student-kolegij,kolegij)==0)
{
glava=student-next;
Glava je pocetak liste, ne bi trebalo da se menja, osim kod uklanjanja prvog elementa liste. Isto tako, nisi povezao preostale clanove liste. Pisem napamet, ali ovo bi trebalo ovako nekako (pisem u preformat stilu iz Thunderbirda, valjda ce ispasti u redu):
student = glava; student_prev = NULL; while ( student != NULL ) { if( student-index == index strcmp(student-kolegij,kolegij) == 0 ) { if ( student == glava ) glava = student-next; else { student_prev-next = student-next; } free(student); return; } else student_prev = student; } Isto vazi i kod ocenjivanja.

Nisam razumeo u kome smislu nema sortiranja, tako da to i ne komentarisem.
 
Odgovor na temu

zbokanov
Tomislavgrad

Član broj: 14604
Poruke: 60
*.tel.net.ba.

ICQ: 146504162


Profil

icon Re: Nedovršen program u C-u25.04.2005. u 21:51 - pre 231 meseci
Iz zadatka: Podaci se smještaju u dinamički povezanu listu sortiranu po prezimenu studenta (i imenu ako je prezime isto)
To mi je najveći problem.
You rule this town like God rules the world. You give and you take away.
 
Odgovor na temu

don_mathew

Član broj: 27904
Poruke: 74
212.39.104.*



Profil

icon Re: Nedovršen program u C-u26.04.2005. u 11:54 - pre 231 meseci
zbokanov sigurno studiras u mostaru na racunalstvu :P jer je zadatak identican lolchina btw ja sam to polozio davno i imam uradjene sve zadatke pa ti posaljem kad stignem...
 
Odgovor na temu

xxxrugby

Član broj: 16068
Poruke: 653
*.ericsson.net.

Sajt: www.zagreb-rugby.hr


Profil

icon Re: Nedovršen program u C-u26.04.2005. u 22:33 - pre 231 meseci
Znaci ima ti ovaj rjesene zadatke.

Al da kad saljes drugi put cod.

Daj kodiraj taj cod.

[CODE]
Ovaj code ide malim slovima!
[/CODE]
xxxrugby: "We are all philosophers, when question is about politics!"
 
Odgovor na temu

Mihajlo Cvetanović
Beograd

Moderator
Član broj: 37636
Poruke: 1249



+96 Profil

icon Re: Nedovr�en program u C-u27.04.2005. u 08:24 - pre 231 meseci
[CODE]

int main(void)

{

printf("Hello Worldn"); // nadam se da ce da proradi

}

[/CODE]
 
Odgovor na temu

george_w

Član broj: 20754
Poruke: 16
*.tel.net.ba.



Profil

icon Re: Nedovršen program u C-u27.04.2005. u 18:47 - pre 231 meseci
Ovako:

1. Sortiranje se ne radi u klasicnom smislu sortiranja (bubble, quick...), nego se kod unosa svakog novog clana liste, trazi njegovo mjesto - npr., uneses podatke o studentu u neke lokalne, bezvezne varijable, onda krenes od prvog clana i provjeravas da li je ime, prezime ili sta vec manje od unesenog podatka. Ako nije, ides dalje. Valjda je princip jasan (kao kod pronalaska max ili min clana liste ili niza, svejedno).

2. Ne kontam u cemu je fol sa strcpy (kao da strcpy nije dobar)? Ipak su pocetnici u pitanju... Studenti i tako to...

3. Sto se tice pomjeranja glave, o tom nema ni govora. Tamo u kodu stoji: glava = student->next, a treba student = student->next (jer se upravo student provjerava u while petlji!). Glava se pomjera samo kod brisanja cijele liste (a i ne mora), ili kod brisanja clana na kojeg pokazuje glava. U tom zadnjem sliucaju kod izgleda ovako:

student = glava;
glava = glava->next;
free(student);

Eto.
 
Odgovor na temu

[es] :: C/C++ programiranje :: Nedovršen program u C-u

[ Pregleda: 2938 | Odgovora: 6 ] > FB > Twit

Postavi temu Odgovori

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