binary 206 – Fd. Medlem
Postad: 14 sep 2020 14:56

Skriva program med temperatursskillnad

Jag ska skriva ett program som räknar ut skillnaden mellan två positiva temperaturer, för att sedan skriva ut vilka temperaturer som finns mellan dessa två. Raden som skrivs ut ska vara så att det bara är samma heltalsdel på samma rad.
Dvs;
Ange två temperaturer: 9.5  10.5
Alla temperaturerna däremellan är:
                                                             9.6 9.7 9.8 9.9
10.0 10.1 10.2 10.3 10.4

 

Jag har fått det att fungera att programmet skriver ut alla temperaturer, men fastnar på hur jag ska tänka när det ska bli tomma utrymmen.

Put("Ange två temperaturer: ");
Get(A);
Get(B);
New_Line;
Put_Line("Alla temperaturerna däremellan är:");
A := A + 0.1;
while A < B loop
Put(A, Fore => 2, Aft => 1, Exp => 0);
Put(' ');
A := A + 0.1;
end loop;

Aerius 504 – Fd. Medlem
Postad: 14 sep 2020 15:10

Om du behandlar den första temperaturen som ett fall för sig och alla andra för sig. Skriv ut första temperaturen sen skriver du ut alla andra temperaturer med ett mellanslag framför. Fungerar det?

Laguna Online 30711
Postad: 14 sep 2020 15:14 Redigerad: 14 sep 2020 15:15

Ett sätt: innan du ökar på A på slutet så spara A i en variabel A0. Sen efter att du har inkrementerat A så jämför du heltalsdelarna av A och A0 och om de är olika är det dags att bryta raden.

Det finns ett par problem med detta men börja och se om du får det att fungera.

Vad är det för språk förresten? Ada? 

binary 206 – Fd. Medlem
Postad: 14 sep 2020 15:52
Aerius skrev:

Om du behandlar den första temperaturen som ett fall för sig och alla andra för sig. Skriv ut första temperaturen sen skriver du ut alla andra temperaturer med ett mellanslag framför. Fungerar det?

Jag tror jag förstår hur du menar. Om vi börjar med 9.5 ska jag loopa den tills den når 9.9, sedan ska det bli radbyte. Men fastnar på hur jag ska skriva för att få loopen att sluta efter 9.9. 

 

Ett sätt: innan du ökar på A på slutet så spara A i en variabel A0. Sen efter att du har inkrementerat A så jämför du heltalsdelarna av A och A0 och om de är olika är det dags att bryta raden.

Låt säga att
A0=9.6 
A:=A+0.1

Jag ska då bara kontrollera nian i båda dessa? Hur kan jag jämföra bara en del av en float?

Yes, det är Ada. 

Laguna Online 30711
Postad: 14 sep 2020 15:55

I en del språk heter det int(A), så får du 9 från 9.9 och 10 från 10.0, men i Ada vet jag inte. Nån gång kan det heta trunc(A), och så avrundar int(A) i stället, det är inte det vi vill här.

binary 206 – Fd. Medlem
Postad: 14 sep 2020 20:08

Har testat med att göra om float till int, men detta medför avrundning. Kan heller inte hitta att det ska gå att enbart ta heltalet från en float. 

Laguna Online 30711
Postad: 14 sep 2020 20:13

Här finns nåt: https://en.wikibooks.org/wiki/Ada_Programming/Attributes/%27Truncation 

Aerius 504 – Fd. Medlem
Postad: 14 sep 2020 21:08

Kan du göra om talet till en sträng? På så sätt testa om första elementet i strängen ändras när nästa tal ska skrivas ut?

Laguna Online 30711
Postad: 15 sep 2020 09:27

Hur ska programmet bete sig om man anger ett A som är större än B?

Kolla att rätt antal radbrytningar kommer ut om det skrivs ut bara en mellanliggande temperatur, eller ingen alls, eller om sista mellanliggande temperaturen slutar på .9 (dvs. det kommer ingen .0 på nästa rad).

Hur ska programmet bete sig om A är negativ?

Svara
Close