Search
 
 
  Engleski
 
 
 
Open in this window (click to change)
Forum@DeGiorgi: Početna
Forum za podršku nastavi na PMF-MO
Login Registracija FAQ Smajlići Članstvo Pretražnik Forum@DeGiorgi: Početna

Datoteke (zadatak)
WWW:
Idite na Prethodno  1, 2
Moja sarma
 
Započnite novu temu   Odgovorite na temu   printer-friendly view    Forum@DeGiorgi: Početna -> Kolegiji 1. godine, preddiplomski studij Matematika -> Programiranje 1 i 2
Prethodna tema :: Sljedeća tema  
Autor/ica Poruka
vsego
Site Admin
Site Admin


Pridružen/a: 06. 10. 2002. (22:07:09)
Postovi: (3562)16
Spol: zombi
Sarma = la pohva - posuda
854 = 1068 - 214
Lokacija: /sbin/init

PostPostano: 18:24 čet, 25. 6. 2009    Naslov: Citirajte i odgovorite

Dva nacina:[list=1][*]Ucitas datoteku kao niz stringova i onda prepises u dva prolaza kroz niz (u prvom prolazu one koji zapocinju sa [tt]'A'[/tt], a u drugom one koji zapocinju s [tt]'.'[/tt]).
Ovo smijes samo ako su dozvoljeni pomocni nizovi (koje tu treba alocirati dinamicki).
[*]Citas datoteku dva puta (znak po znak, liniju po liniju,... kako god) i prepisujes u izlaznu datoteku: prvi put one linije koje zapocinju sa [tt]'A'[/tt], a drugi put one koje zapocinju s [tt]'.'[/tt]).
Skok na pocetak ulazne datoteke izmedju ta dva citanja radis funkcijom [tt]rewind()[/tt][/list:o]
8)
Dva nacina:
  1. Ucitas datoteku kao niz stringova i onda prepises u dva prolaza kroz niz (u prvom prolazu one koji zapocinju sa 'A', a u drugom one koji zapocinju s '.').
    Ovo smijes samo ako su dozvoljeni pomocni nizovi (koje tu treba alocirati dinamicki).
  2. Citas datoteku dva puta (znak po znak, liniju po liniju,... kako god) i prepisujes u izlaznu datoteku: prvi put one linije koje zapocinju sa 'A', a drugi put one koje zapocinju s '.').
    Skok na pocetak ulazne datoteke izmedju ta dva citanja radis funkcijom rewind()

Cool



_________________
U pravilu ignoriram pitanja u krivim topicima i kodove koji nisu u [code]...[/code] blokovima.
Takodjer, OBJASNITE sto vas muci! "Sto mi je krivo?", bez opisa u cemu je problem, rijetko ce zadobiti moju paznju.
Drzim prodike
[Vrh]
Korisnički profil Pošaljite privatnu poruku
malena
Forumaš(ica)
Forumaš(ica)


Pridružen/a: 27. 03. 2009. (16:43:42)
Postovi: (62)16
Spol: žensko
Sarma = la pohva - posuda
= 9 - 8
Lokacija: ...

PostPostano: 20:21 čet, 25. 6. 2009    Naslov: Citirajte i odgovorite

pozz,
duuuboko san zapela na datotekama pa ako neko ima vrimena da pogleda ovaj kod i upozori me na greske u njemu (sigurno ih ima 1001 ) :puppydogeyes:

zasto mi se odmah prozor zatvori, a stavila san system("PAUSE")? (Vjezbam na windows-u).
hvala puuuno!

[size=9][color=#999999]Added after 57 seconds:[/color][/size]

[code:1]#include <stdio.h>
#include <stdlib.h>
#include <string.h>

typedef struct{
char ime[51], prezime[51];
int ocjena[2];
}student;

int main(){
FILE *in1, *in2, *out;
int i, j, ocjena[2];
char ime[51], prezime[51];
student *a=NULL;

in1=fopen("ma.txt", "rt");
if(in1==NULL){
fprintf(stderr, "Ne mogu otvoriti datoteku ma!\n");
exit(1);
}

in2=fopen("la.txt", "rt");
if(in2==NULL){
fclose(in1);
fprintf(stderr, "Ne mogu otvoriti datoteku la!\n");
exit(2);
}

out=fopen("sve.txt", "wt");
if(out==NULL){
fclose(in1);
fclose(in2);
fprintf(stderr, "Ne mogu otvoriti datoteku za pisanje!\n");
exit(3);
}

int n=0;
while(fscanf(in1, "%[^;];%[^;];%d ", ime, prezime, ocjena[0])==3) n++;
rewind(in1);

a=(student*)malloc(n*sizeof(student));
if(a==NULL){
printf("Nema mjesta za alokaciju liste studenata!!!\n");
exit(4);
}
i=0;
while(fscanf(in1, "%[^;];%[^;];%d ", a[i].ime, a[i].prezime, &a[i].ocjena[0])==3) i++;
fclose(in1);

i=0;
while(fscanf(in2, "%[^;];%[^;];%d", ime, prezime, &ocjena[1])==3){
if((strcmp(a[i].ime, ime)!=0) || (strcmp(a[i].prezime, prezime)!=0)){
a=(student*)realloc(a, (++n)*sizeof(student));
strcpy(a[n-1].ime, ime);
strcpy(a[n-1].prezime, prezime);
a[n-1].ocjena[1]=ocjena[1];
}
else a[i].ocjena[1]=ocjena[1];
i++;
}
fclose(in2);

for(i=0; i<n-1; i++){
for(j=i+1; j<n; j++){
if(strcmp(a[i].prezime, a[j].prezime)>0){
student tmp=a[i];
a[i]=a[j];
a[j]=tmp;
}
if(strcmp(a[i].prezime, a[j].prezime)==0 && strcmp(a[i].ime, a[i].ime)>0){
student tmp=a[i];
a[i]=a[j];
a[j]=tmp;
}
}
}

for(i=0; i<n; i++){
fprintf(out, "%s;%s;", a[i].ime, a[i].prezime);
if(!(a[i].ocjena[0])){
a[i].ocjena[0]='-';
fprintf(out, "%c;", a[i].ocjena[0]);
}
else fprintf(out, "%d;", a[i].ocjena[0]);
if(!(a[i].ocjena[1])){
a[i].ocjena[1]='-';
fprintf(out, "%c;", a[i].ocjena[1]);
}
else fprintf(out, "%d\n", a[i].ocjena[1]);
}

fclose(out);
free(a);
system("PAUSE");
return 0;
}




[/code:1]
pozz,
duuuboko san zapela na datotekama pa ako neko ima vrimena da pogleda ovaj kod i upozori me na greske u njemu (sigurno ih ima 1001 ) #Puppy dog

zasto mi se odmah prozor zatvori, a stavila san system("PAUSE")? (Vjezbam na windows-u).
hvala puuuno!

Added after 57 seconds:

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

typedef struct{
        char ime[51], prezime[51];
        int ocjena[2];
        }student;

int main(){
    FILE *in1, *in2, *out;
    int i, j, ocjena[2];
    char ime[51], prezime[51];
    student *a=NULL;
   
    in1=fopen("ma.txt", "rt");
    if(in1==NULL){
                  fprintf(stderr, "Ne mogu otvoriti datoteku ma!\n");
                  exit(1);
                  }
   
    in2=fopen("la.txt", "rt");
    if(in2==NULL){
                  fclose(in1);
                  fprintf(stderr, "Ne mogu otvoriti datoteku la!\n");
                  exit(2);
                  }     
   
    out=fopen("sve.txt", "wt");
    if(out==NULL){
                  fclose(in1);
                  fclose(in2);
                  fprintf(stderr, "Ne mogu otvoriti datoteku za pisanje!\n");
                  exit(3);
                  }
   
    int n=0;
    while(fscanf(in1, "%[^;];%[^;];%d ", ime, prezime, ocjena[0])==3) n++;
    rewind(in1);
   
    a=(student*)malloc(n*sizeof(student));
    if(a==NULL){
                printf("Nema mjesta za alokaciju liste studenata!!!\n");
                exit(4);
                }
    i=0;
    while(fscanf(in1, "%[^;];%[^;];%d ", a[i].ime, a[i].prezime, &a[i].ocjena[0])==3) i++;
    fclose(in1);
   
    i=0;
    while(fscanf(in2, "%[^;];%[^;];%d", ime, prezime, &ocjena[1])==3){
                                 if((strcmp(a[i].ime, ime)!=0) || (strcmp(a[i].prezime, prezime)!=0)){
                                                       a=(student*)realloc(a, (++n)*sizeof(student));
                                                       strcpy(a[n-1].ime, ime);
                                                       strcpy(a[n-1].prezime, prezime);
                                                       a[n-1].ocjena[1]=ocjena[1];
                                 }
                                 else a[i].ocjena[1]=ocjena[1];
                                 i++;
                                 }
   fclose(in2);
   
   for(i=0; i<n-1; i++){
            for(j=i+1; j<n; j++){
                       if(strcmp(a[i].prezime, a[j].prezime)>0){
                                               student tmp=a[i];
                                               a[i]=a[j];
                                               a[j]=tmp;
                                               }
                       if(strcmp(a[i].prezime, a[j].prezime)==0 && strcmp(a[i].ime, a[i].ime)>0){
                                               student tmp=a[i];
                                               a[i]=a[j];
                                               a[j]=tmp;
                                               }
                       }
            }
   
   for(i=0; i<n; i++){
             fprintf(out, "%s;%s;", a[i].ime, a[i].prezime);
             if(!(a[i].ocjena[0])){
                                   a[i].ocjena[0]='-';
                                   fprintf(out, "%c;", a[i].ocjena[0]);
                                   }
             else fprintf(out, "%d;", a[i].ocjena[0]);
             if(!(a[i].ocjena[1])){
                                   a[i].ocjena[1]='-';
                                   fprintf(out, "%c;", a[i].ocjena[1]);
                                   }
             else fprintf(out, "%d\n", a[i].ocjena[1]);
             }
             
   fclose(out);
   free(a);
   system("PAUSE");
   return 0;
}
   
   
   
   
                       


[Vrh]
Korisnički profil Pošaljite privatnu poruku
vsego
Site Admin
Site Admin


Pridružen/a: 06. 10. 2002. (22:07:09)
Postovi: (3562)16
Spol: zombi
Sarma = la pohva - posuda
854 = 1068 - 214
Lokacija: /sbin/init

PostPostano: 21:06 čet, 25. 6. 2009    Naslov: Citirajte i odgovorite

Elementarno trazenje po nizu, iz prvog semestra (nema razlike sto su tu strukture sa stringovima):
[code:1] while(fscanf(in2, "%[^;];%[^;];%d", ime, prezime, &ocjena[1])==3){
if((strcmp(a[i].ime, ime)!=0) || (strcmp(a[i].prezime, prezime)!=0)){
a=(student*)realloc(a, (++n)*sizeof(student));
strcpy(a[n-1].ime, ime);
strcpy(a[n-1].prezime, prezime);
a[n-1].ocjena[1]=ocjena[1];
}
else a[i].ocjena[1]=ocjena[1];
i++;
}[/code:1]
Ovo je visestruko krivo. :joooj: Ako zelis par [tt](ime, prezime)[/tt] naci u nizu, onda:
[code:1]while(fscanf(in2, "%[^;];%[^;];%d", ime, prezime, &ocjena) == 3) {
for (i = 0; i < n; ++i)
if (strcmp(a[i].ime, ime) == 0 && strcmp(a[i].prezime, prezime) == 0) break;
if (i >= n) {
/* Dodaj na kraj niza */
} else
a[i].ocjena[1] = ocjena;
}[/code:1]
(ocito, pomocna varijabla [tt]ocjena[/tt] moze biti obican [tt]int[/tt]; niz je kompliciranje bez svrhe)

Ovdje:
[tt]if (strcmp(a[i].prezime, a[j].prezime)==0 && strcmp(a[i].ime, a[[color=red]i[/color]].ime) > 0) {[/tt]
ide [tt]j[/tt]. :)

Ovdje:
[code:1]while(fscanf(in1, "%[^;];%[^;];%d ", a[i].ime, a[i].prezime, &a[i].ocjena[0])==3) i++;[/code:1]
zaboravljas inicijalizirati [tt]a[i].ocjena[1][/tt] (na nulu, minus jedan ili tako nesto; [b]ne[/b] na [tt]'-'[/tt] :?).

Ovo:
[code:1] if(!(a[i].ocjena[0])){
a[i].ocjena[0]='-';
fprintf(out, "%c;", a[i].ocjena[0]);
}
else fprintf(out, "%d;", a[i].ocjena[0]);[/code:1]
nema smisla ovako (znak [tt]'-'[/tt] utrpati u varijablu tipa [tt]int[/tt]... cemu?!). Probaj ovako:
[code:1]if (!a[i].ocjena[0])
fprintf(out, "-;");
else
fprintf(out, "%d;", a[i].ocjena[0]);[/code:1]

A zasto program "padne"... ne znam... imas li kreirane datoteke [tt]ma.txt[/tt] i [tt]la.txt[/tt]? :-k Je l' ti kreira datoteku [tt]svi.txt[/tt]? :-k
Elementarno trazenje po nizu, iz prvog semestra (nema razlike sto su tu strukture sa stringovima):
Kod:
    while(fscanf(in2, "%[^;];%[^;];%d", ime, prezime, &ocjena[1])==3){
                                 if((strcmp(a[i].ime, ime)!=0) || (strcmp(a[i].prezime, prezime)!=0)){
                                                       a=(student*)realloc(a, (++n)*sizeof(student));
                                                       strcpy(a[n-1].ime, ime);
                                                       strcpy(a[n-1].prezime, prezime);
                                                       a[n-1].ocjena[1]=ocjena[1];
                                 }
                                 else a[i].ocjena[1]=ocjena[1];
                                 i++;
                                 }

Ovo je visestruko krivo. Joj, joj, joj,... JOOOJ! Ako zelis par (ime, prezime) naci u nizu, onda:
Kod:
while(fscanf(in2, "%[^;];%[^;];%d", ime, prezime, &ocjena) == 3) {
  for (i = 0; i < n; ++i)
    if (strcmp(a[i].ime, ime) == 0 && strcmp(a[i].prezime, prezime) == 0) break;
  if (i >= n) {
    /* Dodaj na kraj niza */
  } else
    a[i].ocjena[1] = ocjena;
}

(ocito, pomocna varijabla ocjena moze biti obican int; niz je kompliciranje bez svrhe)

Ovdje:
if (strcmp(a[i].prezime, a[j].prezime)==0 && strcmp(a[i].ime, a[i].ime) > 0) {
ide j. Smile

Ovdje:
Kod:
while(fscanf(in1, "%[^;];%[^;];%d ", a[i].ime, a[i].prezime, &a[i].ocjena[0])==3) i++;

zaboravljas inicijalizirati a[i].ocjena[1] (na nulu, minus jedan ili tako nesto; ne na '-' Confused).

Ovo:
Kod:
             if(!(a[i].ocjena[0])){
                                   a[i].ocjena[0]='-';
                                   fprintf(out, "%c;", a[i].ocjena[0]);
                                   }
             else fprintf(out, "%d;", a[i].ocjena[0]);

nema smisla ovako (znak '-' utrpati u varijablu tipa int... cemu?!). Probaj ovako:
Kod:
if (!a[i].ocjena[0])
  fprintf(out, "-;");
else
  fprintf(out, "%d;", a[i].ocjena[0]);


A zasto program "padne"... ne znam... imas li kreirane datoteke ma.txt i la.txt? Think Je l' ti kreira datoteku svi.txt? Think



_________________
U pravilu ignoriram pitanja u krivim topicima i kodove koji nisu u [code]...[/code] blokovima.
Takodjer, OBJASNITE sto vas muci! "Sto mi je krivo?", bez opisa u cemu je problem, rijetko ce zadobiti moju paznju.
Drzim prodike
[Vrh]
Korisnički profil Pošaljite privatnu poruku
malena
Forumaš(ica)
Forumaš(ica)


Pridružen/a: 27. 03. 2009. (16:43:42)
Postovi: (62)16
Spol: žensko
Sarma = la pohva - posuda
= 9 - 8
Lokacija: ...

PostPostano: 21:43 čet, 25. 6. 2009    Naslov: Citirajte i odgovorite

znaci, iako mi je u strukturi ocjena definirana kao dvoclano polje ja u mainu mogu deklarirati kao obicni int i tek onda kad slazem niz struktura ocjene popuniti u niz ocjena. sto se tice padanja programa... frendica mi je dala cd s devcpp-om taj pada na svaku sitnicu :oops:
a komandna linija ju uopce ne nade. probala sam DIR, pa desktop(nesto mi je frend objasnjavao) no ne ide...
znaci, iako mi je u strukturi ocjena definirana kao dvoclano polje ja u mainu mogu deklarirati kao obicni int i tek onda kad slazem niz struktura ocjene popuniti u niz ocjena. sto se tice padanja programa... frendica mi je dala cd s devcpp-om taj pada na svaku sitnicu Embarassed
a komandna linija ju uopce ne nade. probala sam DIR, pa desktop(nesto mi je frend objasnjavao) no ne ide...


[Vrh]
Korisnički profil Pošaljite privatnu poruku
vsego
Site Admin
Site Admin


Pridružen/a: 06. 10. 2002. (22:07:09)
Postovi: (3562)16
Spol: zombi
Sarma = la pohva - posuda
854 = 1068 - 214
Lokacija: /sbin/init

PostPostano: 22:07 čet, 25. 6. 2009    Naslov: Citirajte i odgovorite

[quote="malena"]znaci, iako mi je u strukturi ocjena definirana kao dvoclano polje ja u mainu mogu deklarirati kao obicni int i tek onda kad slazem niz struktura ocjene popuniti u niz ocjena.[/quote]

Paaaa... da. :) Tvoj [tt]a[i].ocjena[0][/tt] je tipa [tt]int[/tt]. 8) Koja je razlika ako stavis
[code:1]int ocjena[2];
...
a[i].ocjena[0] = ocjena[0];[/code:1]
ili
[code:1]int ocjena;
...
a[i].ocjena[0] = ocjena;[/code:1]
:?:

[quote="malena"]sto se tice padanja programa... frendica mi je dala cd s devcpp-om taj pada na svaku sitnicu :oops:[/quote]

Ne mora biti DevC++ kriv (obicno nije). 8) Svaki onaj [tt]exit(nesto);[/tt] ce ti prekinuti program. :| Dodaj ispred svakog [tt]exit(nesto);[/tt] po jedan [tt]printf("nesto"); system("PAUSE");[/tt], pa ces vidjeti gdje padne (ja pretpostavljam da ne moze otvoriti datoteku za citanje jer ju nisi (dobro) napravila). 8) Naravno, sva tri "nesto" trebaju biti medjusobno razliciti, e da bi znala koji te od tri [tt]exit()[/tt]-a izbacio. 8)

[quote="malena"]a komandna linija ju uopce ne nade. probala sam DIR, pa desktop(nesto mi je frend objasnjavao) no ne ide...[/quote]

Ha? :zbunjen: Koga komandna linija ne nadje? :grebgreb:
malena (napisa):
znaci, iako mi je u strukturi ocjena definirana kao dvoclano polje ja u mainu mogu deklarirati kao obicni int i tek onda kad slazem niz struktura ocjene popuniti u niz ocjena.


Paaaa... da. Smile Tvoj a[i].ocjena[0] je tipa int. Cool Koja je razlika ako stavis
Kod:
int ocjena[2];
...
a[i].ocjena[0] = ocjena[0];

ili
Kod:
int ocjena;
...
a[i].ocjena[0] = ocjena;

Question

malena (napisa):
sto se tice padanja programa... frendica mi je dala cd s devcpp-om taj pada na svaku sitnicu Embarassed


Ne mora biti DevC++ kriv (obicno nije). Cool Svaki onaj exit(nesto); ce ti prekinuti program. Neutral Dodaj ispred svakog exit(nesto); po jedan printf("nesto"); system("PAUSE");, pa ces vidjeti gdje padne (ja pretpostavljam da ne moze otvoriti datoteku za citanje jer ju nisi (dobro) napravila). Cool Naravno, sva tri "nesto" trebaju biti medjusobno razliciti, e da bi znala koji te od tri exit()-a izbacio. Cool

malena (napisa):
a komandna linija ju uopce ne nade. probala sam DIR, pa desktop(nesto mi je frend objasnjavao) no ne ide...


Ha? Zbunjen Koga komandna linija ne nadje? Kotacici rade 100 na sat



_________________
U pravilu ignoriram pitanja u krivim topicima i kodove koji nisu u [code]...[/code] blokovima.
Takodjer, OBJASNITE sto vas muci! "Sto mi je krivo?", bez opisa u cemu je problem, rijetko ce zadobiti moju paznju.
Drzim prodike
[Vrh]
Korisnički profil Pošaljite privatnu poruku
Prethodni postovi:   
Započnite novu temu   Odgovorite na temu   printer-friendly view    Forum@DeGiorgi: Početna -> Kolegiji 1. godine, preddiplomski studij Matematika -> Programiranje 1 i 2 Vremenska zona: GMT + 01:00.
Idite na Prethodno  1, 2
Stranica 2 / 2.

 
Forum(o)Bir:  
Ne možete otvarati nove teme.
Ne možete odgovarati na postove.
Ne možete uređivati Vaše postove.
Ne možete izbrisati Vaše postove.
Ne možete glasovati u anketama.
You cannot attach files in this forum
You can download files in this forum


Powered by phpBB © 2001, 2002 phpBB Group
Theme created by Vjacheslav Trushkin
HR (Cro) by Ančica Sečan