binary 199
Postad: 14 sep 2020

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 444
Postad: 14 sep 2020

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 10971
Postad: 14 sep 2020 Redigerad: 14 sep 2020

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 199
Postad: 14 sep 2020
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 10971
Postad: 14 sep 2020

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 199
Postad: 14 sep 2020

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 10971
Postad: 14 sep 2020

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

Aerius 444
Postad: 14 sep 2020

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 10971
Postad: 15 sep 2020

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 Avbryt
Close