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

Program za Autoplac pomoc

[es] :: C/C++ programiranje :: Program za Autoplac pomoc

[ Pregleda: 1182 | Odgovora: 5 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

unknow13
Dimitrije Janic
Tehnicka skola SUBOTICA
Subotica, Srbija

Član broj: 303658
Poruke: 3
*.adsl.eunet.rs.



Profil

icon Program za Autoplac pomoc31.05.2012. u 15:55 - pre 127 meseci
Radimo program za skolu, i napisali smo skoro do kraja, i imamo problem da prilikom unosa novog automobila program ulazi u beskonacnu petlju i nikako ne mozemo da smislimo kako da napisemo for petlju i da radi dobro.
Stanje predstavlja broj automobila na placu.
Evo koda :

Code:
#include<stdio.h>
#include<conio.h>
#include<string.h>
#include<math.h>
int main()
{
    char izbor,search,fuel[10];
    int u,stanje,euro,kms,year,i;
    printf("\n Dobrodosli na Auto plac");
    struct parking{
        char marka[20];
        char model[20];
        char gorivo[10];
        int km;
        int god;
        int cena;
    };
    FILE *plac;
    parking auto1[50];
    printf("\n Za unos novog automobila unesite U , za pretragu unesite P, a za listanje dostupnih auta L \n" );
    scanf("%c",&izbor);
    if(izbor=='U')
    {
        plac=fopen("plac.txt","r");
        fscanf(plac,"%d",&stanje);
        fclose(plac);
        plac=fopen("plac.txt","w+");
        for(i=stanje;i<stanje+1;i++)
        {
            printf("\n Unesite marku auta");
            scanf("%s",&auto1[i].marka);
            fprintf(plac,"%s",&auto1[i].marka);
            printf("\n Unesite model auta");
            scanf("%s",&auto1[i].model);
            fprintf(plac,"%s",&auto1[i].model);
            printf("\n Unesite gorivo koje auto koristi");
            scanf("%s",&auto1[i].gorivo);
            fprintf(plac,"%s",&auto1[i].gorivo);
            printf("\n Unesite kilometrazu");
            scanf("%d",&auto1[i].km);
            fprintf(plac,"%d",&auto1[i].km);
            printf("\n Unesite godiste u formatu xxxx");
            scanf("%d",&auto1[i].god);
            fprintf(plac,"%d",&auto1[i].god);
            printf("\n Unesite cenu auta");
            scanf("%d",&auto1[i].cena);
            fprintf(plac,"%d",&auto1[i].cena);
            stanje ++;
        }
        fclose(plac);
    }
    else if(izbor=='P')
    {
        plac=fopen("plac.txt","r");
        printf("\n Za pretragu po gorivu unesite G \n za pretragu po godistu Y \n za pretragu po kilometrazi unesti K \n za pretragu po ceni, unesite C \n");
        scanf("%c",&search);
        if(search=='G')
        {
            printf("\n Unesite gorivo koje zelite ( DIZEL/BENZIN/GAS )");
            scanf("%s",&fuel[10]);
            for(i=0;i<stanje;i++)
            {
                if(auto1[i].gorivo==fuel)
                {
                    printf("%s",&auto1[i].marka);
                    printf("%s",&auto1[i].model);
                    printf("%d",&auto1[i].km);
                    printf("%d",&auto1[i].god);
                    printf("%d",&auto1[i].cena);
                    printf("%s",&auto1[i].gorivo);
                }
            }
        }
    }
    else if(search=='Y')
    {
        printf("\n Unesite od kojeg godista trazite auto (xxxx)");
        scanf("%d",&year);
        for(i=0;i<stanje;i++)
        {
            if(auto1[i].god>=year)
            {
                printf("%s",&auto1[i].marka);
                printf("%s",&auto1[i].model);
                printf("%d",&auto1[i].km);
                printf("%s",&auto1[i].gorivo);
                printf("%d",&auto1[i].cena);
                printf("%d",&auto1[i].god);
            }
        }
    }
    else if(search=='K')
    {
        printf("\n Unesite do koje kilometraze trazite auto");
        scanf("%d",&kms);
        for(i=0;i<stanje;i++)
        {
            if(auto1[i].km<=kms)
            {
                printf("%s",&auto1[i].marka);
                printf("%s",&auto1[i].model);
                printf("%s",&auto1[i].gorivo);
                printf("%d",&auto1[i].god);
                printf("%d",&auto1[i].cena);
                printf("%d",&auto1[i].km);
            }
        }
    }
    else if(search=='C')
    {
        printf("\n Unesite do koje cene trazite auto");
        scanf("%d",&euro);
        for(i=0;i<stanje;i++)
        {
            if(auto1[i].cena<=euro)
            {
                printf("%s",&auto1[i].marka);
                printf("%s",&auto1[i].model);
                printf("%d",&auto1[i].km);
                printf("%d",&auto1[i].god);
                printf("%s",&auto1[i].gorivo);
                printf("%d",&auto1[i].cena);
            }
        }
    }
    else
    {
        for(i=0;i<stanje;i++)
        {
            printf("%s",&auto1[i].marka);
            printf("%s",&auto1[i].model);
            printf("%d",&auto1[i].km);
            printf("%d",&auto1[i].god);
            printf("%s",&auto1[i].gorivo);
            printf("%d",&auto1[i].cena);
        }
    }
    fclose(plac);
    getch();
    return 0;
}


[Ovu poruku je menjao Mihajlo Cvetanović dana 31.05.2012. u 17:25 GMT+1]
 
Odgovor na temu

Mihajlo Cvetanović
Beograd

Moderator
Član broj: 37636
Poruke: 1238



+93 Profil

icon Re: Program za Autoplac pomoc31.05.2012. u 16:46 - pre 127 meseci
Kako treba program da radi? Trenutno kad se program pokrene korisnik može da odabere jedno od U/P/L, i kad se ta jedna operacija završi završiće se i program. Da li tako treba?

Šta tačno treba da stoji u fajlu plac.txt? Malo je čudno što se iz fajla prvo čita jedan broj, a onda se u fajl dodaju podaci. Čemu služi taj broj? Da li je normalno da se podaci samo dodaju, a da se postojeći nikad ne brišu?

Primećujem i da imate grešku u kodu koja se lepo vidi kad je kod ovako nazubljen (mojom intervencijom), a ne ravan kao što je originalno bio. Promenljiva search treba da se postavi i ispituje samo u slučaju P, ali trenutno se tako radi samo sa search=G, a ostali search podslučajevi su izvan slučaja P.

Ja bih kod skratio utoliko što bih ispisivanje podataka za jedno vozilo sklonio u posebnu funkciju sa parametrom koji je referenca na to vozilo. Zatim bih tu funkciju pozivao gde god da mi treba. Morao bi da žrtvuješ različitost redosleda, ali to ja vidim kao prednost, jer nema razloga da redosled podataka o vozilu zavisi od toga po kom kriterijumu tražiš vozilo.
 
Odgovor na temu

unknow13
Dimitrije Janic
Tehnicka skola SUBOTICA
Subotica, Srbija

Član broj: 303658
Poruke: 3
*.adsl.eunet.rs.



Profil

icon Re: Program za Autoplac pomoc31.05.2012. u 16:54 - pre 127 meseci
Da, tako treba. To cemo dodati posle da se program vrati na pocetni meni.
U fajlu plac.txt treba da stoji lista vozila koja se nalaze na placu, a pocetni broj koji bi program trebao da iscita iz istog fajla bi trebao da bude broj vozila na placu. Tako nam je rekla profesorica da uradimo, ne znam da li moze ikako drugacije.
Tu ne znam kako ograniciti for petlju da ne pise preko postojeceg vozila.
Hvala za gresku kod pretrage, do toga jos nismo stigli, ispravicemo.
 
Odgovor na temu

Mihajlo Cvetanović
Beograd

Moderator
Član broj: 37636
Poruke: 1238



+93 Profil

icon Re: Program za Autoplac pomoc31.05.2012. u 17:08 - pre 127 meseci
Fajl plac.txt je tekstualni fajl, i prva linija u fajlu treba da bude broj vozila u fajlu. Okej. To je najelegantnije ostvariti tako što na početku rada programa pročitate kompletan fajl, i učitate sva vozila kod sebe u niz auto1, a na kraju rada prepišete u fajl kompletne podatke (koji su eventualno promenjeni u međuvremenu). Komanda U ne bi radila sa fajlom, nego sa podacima u promenljivoj auto1.

Da bi se lepo učitali ti podaci koje ćete da upišete u fajl najbolje je da svaki podatak stoji u posebnoj liniji tog fajla, odnosno da svaki fprintf ima \n na kraju.

Kad se ovako postave stvari onda se tačno zna šta promenljiva stanje predstavlja, i gde i kad se menja. Prilikom ispisivanja podataka u fajl promenljiva stanje se ne bi menjala.

Kako ste zamislili da radi komanda U, da li sa njom treba da se unesu podaci za jedno vozilo, ili za više odjednom?
 
Odgovor na temu

unknow13
Dimitrije Janic
Tehnicka skola SUBOTICA
Subotica, Srbija

Član broj: 303658
Poruke: 3
*.adsl.eunet.rs.



Profil

icon Re: Program za Autoplac pomoc31.05.2012. u 17:13 - pre 127 meseci
Za jedno vozilo, i nakon unosa poslednjeg podatka za to jedno vozilo, da pita da li zelimo da unesemo jos jedno, ako ne onda vraca na pocetni meni.
 
Odgovor na temu

Mihajlo Cvetanović
Beograd

Moderator
Član broj: 37636
Poruke: 1238



+93 Profil

icon Re: Program za Autoplac pomoc31.05.2012. u 17:23 - pre 127 meseci
Onda treba da postoji nekakva petlja u slučaju U, ali izlazak iz te petlje treba da zavisi od toga kako je korisnik odgovorio na pitanje da li hoće da unese još vozila. Trenutno to pitanje ne postoji. Kad napravite kod koji ne dira fajl u slučaju U (nego podatke samo smešta u auto1) onda će vam biti lako da ubacite i ovu petlju, ali za početak namestite da se na U unosi samo jedno vozilo, promenite kod kako sam napisao u preostalim porukama, i na kraju ubacite i tu petlju u slučaju U.
 
Odgovor na temu

[es] :: C/C++ programiranje :: Program za Autoplac pomoc

[ Pregleda: 1182 | Odgovora: 5 ] > FB > Twit

Postavi temu Odgovori

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