Mit rontokk el ebben a C programban?
Vannak kommentek a feladathoz, a main függvényhez nem kell nyúlni.
#include <stdio.h>
/* Feladat: Adjal meg egy 'Intervallum' struktura tipust.
A struktura ketto adattaggal rendelkezik:
* 'low': egesz tipusu es az intervallum also hatarat adja meg.
* 'high': egesz tipusu es az intervallum felo hatarat adja meg.
Az intervallum mindket vege zart.
Az alabbi feltetel garantalt:
'low' <= 'high'
*/
/* A fuggveny fejlecen ne valtoztass!!!!!! */
struct Intervallum{
int low;
int high;
};
int van_metszet(Intervallum rA, Intervallum rB)
{
struct Intervallum rangeA;
struct Intervallum rangeB;
int tA[], tB[];
int i, j, x;
if((rangeA.low<rangeB.high && rangeA.high<rangeB.low) || (rangeB.low<rangeA.high && rangeB.high<rangeA.low))
return -1;
else {
return 1;
}
/*for(i=0; i<(rangeA.high-rangeA.low); i++)
tA[i]=rangeA.low+i;
for (j=0; j<rangeB.high-rangeB.low; i++)
tB[j]=rangeB.low+j;
*/
/* Feladat: a 'van_metszet' fgv. 1-essel (numerikus egy) terjen vissza
ha van a 'rangeA' es 'rangeB' intervallumoknak metszetuk.
Ha nincs metszet akkor pedig -1-el (minusz egy).
*/
}
/***********************************************************/
/*
EZ ALATT A PROGRAMON NE VALTOZTASS!
*/
/***********************************************************/
int main()
{
int test_data[][5] = {
{ 10, 25, 22, 24, 1},
{ -1, 25, -22, 24, 1},
{ 3, 4, 22, 24, -1},
{ -3, 4, 22, 24, -1},
{ 30, 40, 15, 29, -1},
{ 30, 40, 15, 30, 1},
{ 30, 40, 30, 40, 1},
{ 30, 30, 30, 40, 1},
{ 30, 30, 30, 30, 1},
{ 40, 40, 41, 41, -1},
{-99, 49, 50, 99, -1},
};
int total_tests = sizeof(test_data)/sizeof(test_data[0]);
int passed_tests = 0;
for (int i = 0; i < total_tests; i++)
{
Intervallum rA;
rA.low = test_data[i][0];
rA.high = test_data[i][1];
Intervallum rB;
rB.low = test_data[i][2];
rB.high = test_data[i][3];
printf("Teszt input: [%3d;%3d] metszet [%3d; %3d] Eredmeny: ",
rA.low, rA.high, rB.low, rB.high);
int teszt_metszet = van_metszet(rA, rB);
if (teszt_metszet == test_data[i][4])
{
printf("OK\n");
passed_tests++;
}
else
{
printf("HIBAS!\n");
}
}
printf("Teszt sikeresseg: %.2f%%\n", ((float)passed_tests / total_tests) * 100);
return 0;
}
Ha jol ertem akkor a keretet megkaptad, neked csak az "int van_metszet(Intervallum rA, Intervallum rB)" fuggvenyt kell kitoltened.
Na akkor nezzuk mit csinalsz:
- ugye megkapod kivulrol a 2 valtozot: rA-t es rB-t
- ezutan definialsz 2 masikat veletlenszeruen feltoltve
- felveszel ures int tomboket is foloslegesen
- definialsz nehany veletlenszeru szamot
- majd megvizsgalod hogy a veletlenszeruen feltoltott valtozoidra igaz-e a feltetel
A megoldas egyszeru, a folosleges valtozokat torold ki, hasznald azt amit kivulrol kapsz.
Így néz ki most a main fgv-en kívül, de az rA.low és high meg az rB.low high-ra azt írja, hogy nincs inicializálva. A main függvénynek jónak kéne lennie, azt nem én írtam.
typedef struct Intervallum{
int low;
int high;
} Intervallum;
int van_metszet(Intervallum rangeA, Intervallum rangeB)
{
Intervallum rA;
Intervallum rB;
if((rA.low<rB.high && rA.high<rB.low) || (rB.low<rA.high && rB.high<rA.low))
return -1;
else {
return 1;
}
De miert definialod megint, hogyha megkapod a szukseges intervallumokat a parameterben?
int van_metszet(Intervallum rA, Intervallum rB)
{
if((rA.low<rB.high && rA.high<rB.low) || (rB.low<rA.high && rB.high<rA.low))
return -1;
else {
return 1;
}
Igy mar nem hasznalsz inicializalatlan szamokat. A feltetelt viszont nezd at ujra.
Megvan már. A van_metszet paraméterei először rangeA és rangeB-ként volt megadva, én meg belenéztem a main-be, ahol rA, rB volt használva. Az zavart meg.
Kösz a segítséget!
Kapcsolódó kérdések:
Minden jog fenntartva © 2025, 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!