Kezdőoldal » Számítástechnika » Programozás » Hogyan lenne helyes?

Hogyan lenne helyes?

Figyelt kérdés

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.



2021. okt. 21. 18:00
 1/4 Pelenkásfiú ***** válasza:
100%

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.

2021. okt. 21. 18:10
Hasznos számodra ez a válasz?
 2/4 anonim ***** válasza:
100%

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.

2021. okt. 21. 18:13
Hasznos számodra ez a válasz?
 3/4 A kérdező kommentje:

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;

}

2021. okt. 22. 15:41
 4/4 Pelenkásfiú ***** válasza:

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;

2021. okt. 22. 15:51
Hasznos számodra ez a válasz?

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

A weboldalon megjelenő anyagok nem minősülnek szerkesztői tartalomnak, előzetes ellenőrzésen nem esnek át, az üzemeltető véleményét nem tükrözik.
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!