Hogyan lenne helyes?
Szóval c programot kell írni, ami arról szól, hogy számpárokat olvasok be, amik az angoloknál a láb és hüvelyk vagyis foot és inch struktúrának felelnek meg. És mindegyik számpárnál kiírja a méterbe váltott értékét.
A programnak kell egy struktúra, amiben van a foot és inch.
Ezen kívül kell egy függvény, ami kiszámítja a struktúra méterbe váltott értékét. 1 láb=12 hüvelyk=0,3048 méter. És térjen vissza ezzel a méterbe átváltott értékkel.
Kell egy főprogram, ami addig olvassa a számpárokat az inputon, amíg van, és állítson elő egy ilyen foot és inch struktúrát, és mindegyik számpárnál 4 tizedesjegy pontossággal írja ki szóközökkel elválasztva a méterbe átváltott számmal.
A kód jelenleg ez, és nem tudom mi a hiba:
#include <stdio.h>
struct imperial{
int foot,inch;
} //1 foot=12 inch=0,3048//
double imperial_to_metric(struct imperial szam){
double x=(szam.foot+(szam.inch/12))*0,3048;
return x;
}
int plus(struct imperial e, struct imperial f){
int osszeg=e.foot+f.foot+e.inch+f.inch;
while(osszeg.inch>=12)
{osszeg.inch=osszeg.inch-12;
osszeg.foot++;}
return osszeg;
}
int main()
{int a, b;
while(scanf("%d", &a)==1 && scanf("%d", &b)==1)
{printf("%.4f ", plus(imperial_to_metric(a,b))};
return 0;
}
A feladatban még szerepelt egy olyan hogy kell egy olyan függvény is, ami kap két struktúrát és összeadja, ahol figyelni kell, hogy az inch nem lehet 12 vagy annál több. Ez a függvény az int plus.
Van egy pár hiba.. de kiírja ám neked is.
"*0,3048"
Vessző helyett pont.
"while (osszeg.inch >= 12)"
Az osszeg változó int típusú. Abban nincs "inch".
"plus(imperial_to_metric (a, b))"
Itt átváltod méterbe és utána akarod meghívni az eredményre az összeadást. Ráadásul második paraméter nélkül.
1. structokat ; kell lezárni
2. a tizedespontot vessző helyett ponttal kell jelölni
3. osszeg változó helyett egy imperialt structot kéne definiálni és annak értékeket adni, és egy imperial structot visszadni
4. szam.inch / 12 -> Intet osztasz inttel ami maradékos osztást eredményez. Egyik változót doublelá kell alakítani. (Pl. 12.)
5. a plus függvényt doublellal hívod meg
Szintaktikailag (+ int/int szemantika) ezek a hibák.
Na egy kicsit módosítottam,viszont még mindig nem jó.
#include <stdio.h>
struct imperial{
int foot;
int inch;
}; //1 foot=12 inch=0,3048//
double imperial_to_metric(struct imperial szam){
return (szam.foot+(szam.inch/12.0))*0.3048;
}
struct imperial plus(struct imperial e, struct imperial f){
struct imperial c;
c.foot=e.foot+f.foot;
c.inch=e.inch+f.inch;
while(c.inch>=12.0)
{c.inch=c.inch-12.0;
c.foot++;}
return c;
}
int main(void)
{int a;
int b;
while(scanf("%d", &a)==1 && scanf("%d", &b)==1)
{printf("%.4f",imperial_to_metric(struct imperial(a,b)));}
return 0;
}
A main()-ben deklarálj egy imperial típusú változót mielőtt elkezded használni.
Valamint a structnak nincs ilyen konstruktora, hogy csak átadsz neki két paramétert és automatikusan beállítja a foot és inch értékeket.
Lehet írni hasonlót, de egyelőre jobban jársz ha csak beállítod neki külön-külön.
while() előtt:
struct imperial i;
while()-ban:
i.foot = a;
i.inch = b;
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!