This repository has been archived on 2024-09-24. You can view files and clone it, but cannot push or open issues or pull requests.
Schule/Sonstiges/Kreuzende Autos.cpp

56 lines
2.3 KiB
C++
Raw Normal View History

2017-04-02 17:01:11 +02:00
#include<iostream>
2017-04-05 17:28:45 +02:00
#include<conio.h>
2017-04-02 17:01:11 +02:00
#include<string>
#include<sstream>
2017-04-07 15:44:05 +02:00
//Dieses Programm berechnet wann sich Autos auf einer Stra<72>e treffen, welche gleichzeitig losfahren, wobei die Geschwindigkeit eines Autos schrittweise erh<72>ht werden kann und auf der Gegenspur im Abstand von jeweils 30 Sekunden weitere Autos kommen.
2017-04-02 17:01:11 +02:00
int main()
{
std::string input;
2017-04-08 17:51:54 +02:00
long double speed = 0, distance = 0, speedOppositeTrack = 0, position = 0;
2017-04-02 17:01:11 +02:00
2017-12-05 19:23:11 +01:00
printf("Gib die Strecke der Landstra\xE1 \be in km ein: ");
2017-04-05 13:51:21 +02:00
do
2017-04-02 17:01:11 +02:00
{
2017-04-05 13:51:21 +02:00
getline(std::cin, input);
std::stringstream(input) >> distance;
2017-12-05 19:23:11 +01:00
if(distance<=0)printf("ERROR: Die Strecke muss gr\x94\xE1 \ber als 0 km sein. Gib die Strecke erneut ein: ");
2017-04-05 17:28:45 +02:00
}while(distance<=0);
2017-04-02 17:01:11 +02:00
2017-12-05 19:23:11 +01:00
printf("Gib die Startgeschwindigkeit in km/h ein: ");
2017-04-05 17:28:45 +02:00
do
2017-04-02 17:01:11 +02:00
{
2017-04-05 17:28:45 +02:00
getline(std::cin, input);
std::stringstream(input) >> speed;
2017-12-05 19:23:11 +01:00
if(speed<0 || speed>200) printf("ERROR: Die Geschwindigkeit muss gr\x94\xE1 \ber als 0 km/h sein und darf 200 km/h nicht \x81 \bberschreiten. Gib die Geschwindigkeit erneut ein: ");
2017-04-05 17:28:45 +02:00
}while(speed<0 || speed>200);
2017-04-02 17:01:11 +02:00
2017-12-05 19:23:11 +01:00
printf("Gib nun die Geschwindigkeit der Autos der gegen\x81 \bberliegenden Fahrbahn ein: ");
2017-04-05 17:28:45 +02:00
do
2017-04-02 17:01:11 +02:00
{
2017-04-05 17:28:45 +02:00
getline(std::cin, input);
std::stringstream(input) >> speedOppositeTrack;
2017-12-05 19:23:11 +01:00
if(speedOppositeTrack<0 || speedOppositeTrack>200)printf("ERROR: Die Geschwindigkeit muss gr\x94\xE1 \ber als 0 km/h sein und darf 200 km/h nicht \x81 \bberschreiten. Gib die Geschwindigkeit erneut ein: ");
2017-04-05 17:28:45 +02:00
}while(speedOppositeTrack<0 || speedOppositeTrack>200);
2017-04-02 17:01:11 +02:00
2017-12-05 19:23:11 +01:00
printf("\nGib nach jeder Ausgabe \"+\",\"-\" oder \"\" ein um deine Geschwindigkeit um 5 km/h zu verringern oder erh\x94 \bhen oder die Geschwindigkeit konstant zu halten.\nDie Autos treffen sich wie folgt:\n");
2017-04-02 17:01:11 +02:00
2017-04-07 15:44:05 +02:00
for(long double time = distance/(speed+speedOppositeTrack), position = time*speed; position<=distance && position<=ULLONG_MAX && -speed<speedOppositeTrack; position += speedOppositeTrack/(120*(speed+speedOppositeTrack))*speed && position, time += speedOppositeTrack/(120*(speed+speedOppositeTrack))) //Formel f<>r t nicht ausreichend.
2017-04-02 17:01:11 +02:00
{
2017-12-05 19:23:11 +01:00
printf("%ih:%imin:%isec: %fkm ", (int)time, (int)(time*60)%60, (int)(time*3600)%60, position);
2017-04-02 17:01:11 +02:00
getline(std::cin, input);
if(input=="+") speed += 5;
2017-04-05 17:28:45 +02:00
else if(input=="-") speed -= 5;
2017-04-07 15:44:05 +02:00
}
2017-12-05 19:23:11 +01:00
if(position>ULLONG_MAX) printf("ERROR: Begegnung kann nicht berechnet werden.");
2017-04-02 17:01:11 +02:00
2017-12-05 19:23:11 +01:00
printf("PROGRAMMENDE!");
2017-04-02 17:01:11 +02:00
2017-04-05 17:28:45 +02:00
getch();
2017-04-02 17:01:11 +02:00
return(0);
}