Egy érettségi utolsó feladatát nem tudom megoldani. Hogyan kellene?
Code Blocks-ot használok.
Így szól a feladat :
Melyik volt az az autó, melynek egy napon belüli két tankolása között a legrövidebb idő telt el? Írja ki a képernyőre az autó rendszámát, a két időpont és a közöttük eltelt percek számát!
Eddig jutottam a programban: (több feladat is van benne)
#include <stdio.h>
#include <stdlib.h>
typedef struct{
int tip;
int lit;
char rsz[8];
int e,h,n,o,p;
} tankolas;
tankolas tank[1000], s;
int main()
{
FILE *be;
int dbmax;
int i;
long int ossz[5];
char r[8];
int szlo;
int j;
FILE *ki;
//1. Feladat
be=fopen("tankolas.txt", "r");
dbmax=0;
while(!feof(be)){
fscanf(be, "%i", &tank[dbmax].tip);
if(!feof(be)){
fscanf(be, "%i", &tank[dbmax].lit);
fscanf(be, "%s", &tank[dbmax].rsz);
fscanf(be, "%i.%d.%d", &tank[dbmax].e,
&tank[dbmax].h,
&tank[dbmax].n);
fscanf(be, "%d:%d", &tank[dbmax].o,
&tank[dbmax].p);
dbmax++;
}
}
fclose(be);
//1. Feladat Teszt
/*
for(i=0; i<dbmax; i++){
printf("%i %i %s %i.%i.%i %i:%i\n",
tank[i].tip,
tank[i].lit,
tank[i].rsz,
tank[i].e,
tank[i].h,
tank[i].n,
tank[i].o,
tank[i].p);
}
printf("DBMAX: %i\n", dbmax);
*/
//2. Feladat
printf("2. Feladat\n\n");
printf("Tankolasok szama: %i\n", dbmax);
//3. Feladat
printf("3. Feladat\n\n");
for(i=0; i<5; i++) ossz[i]=0;
for(i=0; i<dbmax; i++){
ossz[tank[i].tip-1]=ossz[tank[i].tip-1]+tank[i].lit;
}
for(i=0; i<5; i++)
printf("tip-%i: %i\n", i+1, ossz[i]);
//4. Feladat
printf("4. Feladat\n\n");
printf("Kerek egy rendszamot:");
scanf("%s", &r);
szlo=0;
for(i=0; i<dbmax; i++){
if(strcmp(r,tank[i].rsz)==0){
printf("%i %i %i.%i.%i %i:%i\n",
tank[i].tip,
tank[i].lit,
tank[i].e,
tank[i].h,
tank[i].n,
tank[i].o,
tank[i].p);
szlo++;
}
}
if(szlo==0) printf("Ez az auto nem tankolt a kutnal. \n");
//6. Feladat
printf("6. Feladat\n\n");
for(j=0; j<dbmax-1; j++)
for(i=0; i<dbmax-1; i++)
if(strcmp(tank[i].rsz,tank[i+1].rsz)>0){
s=tank[i];
tank[i]=tank[i+1];
tank[i+1]=s;
}
ki=fopen("stats.txt", "w");
szlo=1; s=tank[0];
for(i=1; i<dbmax; i++){
if(strcmp(tank[i].rsz, s.rsz)!=0){
fprintf(ki, "%s %i tankolas\n",
s.rsz, szlo);
s=tank[i];
szlo=1;
}
else szlo++;
}
fclose(ki);
return 0;
}
Forrás link : data(pont)hu/get/6334227/tankolas.txt
Először is: melyik évi feladat?
Másodszor: én bele nem ásom magam egy ilyen ömlesztett, behúzások nélküli kódba, de nem is az a lényeg, hanem az algoritmus. Amennyire kiderül ebből a részletből a feladat, veszed az első autó rendszámát, megnézed, hogy mennyi volt az eltelt idő, aztán i=2-től N-ig kezded összehasonlítgatni, és ha találsz kisebbet, akkor azt jegyzed meg helyette, klasszikus minimumkiválasztási tétel.
Ez nem csonkítja meg a programkódokat.
Esetleg nézz utána, van olyan hogy <time.h>.
Azt hiszem megkönnyítené az életed.
Kapcsolódó kérdések:
Minden jog fenntartva © 2024, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!