6. zadatak s proslogodisnjeg kolokvija A grupa (2. kolokvij)
Select messages from
# through # FAQ
[/[Print]\]

Forum@DeGiorgi -> Programiranje 1 i 2

#1: 6. zadatak s proslogodisnjeg kolokvija A grupa (2. kolokvij) Autor/ica: Drake PostPostano: 14:07 sri, 2. 7. 2008
    —
Nisam siguran kako da iscitam podatke iz datoteke , imena odvojeno od dugova (brojeva) i pohranim ih u strukturu svako na svoje mjesto

hvala

#2:  Autor/ica: vsegoLokacija: /sbin/init PostPostano: 14:26 sri, 2. 7. 2008
    —
Sto fali fscanf(fp, "%s %d", struktura.ime, &struktura.dug)? Think

Isto kako je opisano u poglavlju o strukturama, samo citas iz datoteke (dakle fscanf(fp,...) umjesto scanf(...)). Cool

#3:  Autor/ica: Drake PostPostano: 14:30 sri, 2. 7. 2008
    —
hvala puno, predpostavljam da onda ako imena zelim popremati zasebno da napisem fscanf(fp, "%s %s %d", struktura.ime1, struktura.ime2, &struktura.dug);

#4:  Autor/ica: LuukaLokacija: Hakuna Matata PostPostano: 14:32 sri, 2. 7. 2008
    —
Kod:

File *ulaz;
int broj;
char prvi[20],drugi[20];

ulaz=fopen("dugovi.in","r");
while ( fscanf(ulaz,"%s %s %d\n",prvi,drugi,&broj)==3)
{
   i sad tu pogledat dal u polju struktura već postoje prvi i drugi
 
   ako postoje onda im dodat/oduzet broj,
   ako ne postoje, onda ih kreirat.

   provjeru dal postoje radiš s nekom fjom koja trči po polju, pa vraća index u polju ak nađe element koji ima to ime (recimo)
}



Very Happy

#5:  Autor/ica: vsegoLokacija: /sbin/init PostPostano: 14:44 sri, 2. 7. 2008
    —
Drake (napisa):
hvala puno, predpostavljam da onda ako imena zelim popremati zasebno da napisem fscanf(fp, "%s %s %d", struktura.ime1, struktura.ime2, &struktura.dug);


Tocno tako: identicno ne-datotecnom slucaju. Cool

Mozes i pomocu pomocnih varijabli, kao u Luukinom primjeru. Smile No, moze ti pomocna varijabla biti i tipa struct... sve su to ekvivalentni nacini; ti izaberi koji ti najbolje "lezi". Cool

Samo nemoj napraviti ono sto studenti ponekad pogrijese: trpati u dinamicki alocirani struct (npr. kad se radi realloc() niza struct-ova) prije nego mu alociras memoriju. Ccc.... Sram te bilo... Dakle, NE:
Kod:
while (fscanf(ulaz, "%s %s %d\n", struktura->ime, struktura->prezime, &struktura->broj) == 3)
  if (meni_se_podaci_svidjaju(*struktura))
    struktura = (tip_strukture*) malloc(sizeof(tip_strukture));
  // inace, zanemarim ucitano

Wink

#6:  Autor/ica: Drake PostPostano: 15:45 sri, 2. 7. 2008
    —
Kod:
#include <stdio.h>
#include <stdlib.h>

typedef struct{
        char ime1[20];
        char ime2[20];
        int dug;
        } dugovi;
       

int main(){
    int i, j, dug,cnt=0, maxdug;
    char ime1[20], ime2[20], maximalni[20], iname[20],oname[20];
    dugovi niz[100];
    printf("Unesite ime ulazne datoteke\n");
    scanf("%s", iname);
    FILE *ulaz, *izlaz;
    ulaz=fopen(iname, "r");
    while ( fscanf(ulaz,"%s %s %d\n",ime1,ime2,&dug)==3)
    { ++cnt;
    for(i=0;i<cnt;i++){
                       if(ime1==niz[i].ime1 && ime2==niz[i].ime2){niz[i].dug=niz[i].dug+dug;}
                       if(ime1==niz[i].ime2 && ime2==niz[i].ime1){niz[i].dug=niz[i].dug-dug;}
                       else{niz[cnt].ime1=ime1; niz[cnt].ime2=ime2; niz[cnt].dug=dug;}
                       }
                       }
    for(i=0;i<cnt-1;i++){
                         ime1=niz[i].ime1;
                         dug=niz[i].dug;
    for(j=0;j<cnt;j++){
                       if(i!=j){
                         if(ime1==niz[j].ime1)dug=dug+niz[j].dug;
                         if(ime1==niz[j].ime2)dug=dug-niz[j].dug;
                         }
                         }
                         if(i==0){maximalni=ime1; maxdug=dug;}
                         if(dug>maxdug){maxdug=dug; maximalni=ime1;}
                         }
   printf("%s %d", maximalni, maxdug);
   scanf(" ");
   return 0;
}



evo , napisao sam bez ispisa u datoteku ali nece iskompajlirati, zbog "ISO C++ forbids assignment of arrays " greske pa ako netko zna u cemu je problem bio bi ako zahvalan da me uputi Smile

#7:  Autor/ica: Mad Wilson PostPostano: 15:51 sri, 2. 7. 2008
    —
EDIT
Kod:
niz[cnt].ime1=ime1

Da sam ja compiler, ovo bi me smetalo; pridruzuju se array-i.

#8:  Autor/ica: vsegoLokacija: /sbin/init PostPostano: 16:17 sri, 2. 7. 2008
    —
Uz ovo sto je M.W. napisao:
- deklaracije idu ispred naredbi
- "ISO C++ forbids assignment of arrays " Arrow imam dojam da si ostavio ekstenziju .cpp
Confused

Nadalje:
Kod:
    while ( fscanf(ulaz,"%s %s %d\n",ime1,ime2,&dug)==3)
    { ++cnt;
    for(i=0;i<cnt;i++){

Cemu bezuvjetno povecavanje cnt-a i to bas za 1 i onda jos odmah iza imas petlju koja cita i-ti element, bez da mu prije toga postavi vrijednost? Think Ako su oba imena u nizu, cnt se ne bi smio mijenjati; ako je samo jedno ime u nizu, treba ga povecati za 1; ako niti jedno ime nije u nizu (npr. u prvom koraku), treba ga povecati za 2. Confused

Kako sam rekao na vjezbama (za taj isti zadatak): idealno je napisati funkciju koja trazi ime u nizu, te dodavati elemente u niz ako ona ne nadje sto trazi. Cool

Dodatak: tek sada skuzih da pamtis uredjene parove imena i pripadne dugove, sto nije dobro. Confused Dugovi se "prebijaju", sto znaci da trebas pamtiti po jedno ime i dug te osobe, zatim trazis dvije osobe (dva struct-a) i onda njima mijenjas dugove (duzniku povecas dug, ovom drugom smanjis). Smile



Forum@DeGiorgi -> Programiranje 1 i 2


output generated using printer-friendly topic mod. Vremenska zona: GMT + 01:00.

Stranica 1 / 1.

Powered by phpBB © 2001,2002 phpBB Group
Theme created by Vjacheslav Trushkin