Необходима проверка кода программы

Добрый вечер! Проверьте, пожалуйста, если можете, правильность написания кода программы для следующей задачи:Спортсмен-лыжник начал тренировки, пробежав в первый день 10 км. Каждый следующий день он увеличивал длину пробега на P процентов от пробега предыдущего дня (P — вещественное, 0 < P < 50). По данному P определить, после какого дня суммарный пробег лыжника за все дни превысит 200 км, и вывести найденное количество дней K (целое) и суммарный пробег S (вещественное число).
#include <iostream>
#include<cmath> 
using namespace std;
int main() 
{int K,n; 
float p,S,KM; 
cout<<"Sportsmen probezhal v pervyj den 10 km. Kazhdyj sledyushij den on yvelithival dliny probega na p procentov ot pridedyshego dnya. Vvedite p, pri yslovii: 0<p<50->"; 
cin>>p;
S=10; n=1;  
while (S<=200) 
{KM= ((p/100)*S); 
S=S+KM; 
K=n++; } 
cout<<" kolithestvo dnej, za kotoroe probeg prevysel 200 km="<<K<<"\n"; 
cout<<" symarnyj probeg za eti dni="<<S<<"\n"; 
return 0; 
}
9 ответов

если ввести 0 то цикл повиснет


если ввести 0 то цикл повиснет
а причем тут 0?там 0 не входит в промежуток


а причем тут 0?
"Защита от дурака", знаете такой принцип? Вы должны построить программу так, чтобы дурак(юзер) не мог её разрушить.


"Защита от дурака", знаете такой принцип?
безусловно. но я же написала 0 не входит в промежуток,т.е его не нужно вводить.
"Защита от дурака", знаете такой принцип? Вы должны построить программу так, чтобы дурак(юзер) не мог её разрушить.
ну так помоги тогда сделать как-то по-другому.


безусловно. но я же написала 0 не входит в промежуток,т.е его не нужно вводить
а я какраз не читал описание, а только код.


его не нужно вводить.
а я какраз не читал описание, а только код.
Вот и пример. Юзер не напрягается насчет валидности данных и, к сожалению, программа должна это делать сама. Вроде так, если с выражением не перепутал.
#include <iostream>
#include <cmath> 
 
using namespace std;
 
int main() {
 int K, n; 
 float p, S, KM;
 do { 
  cout << "Sportsmen probezhal v pervyj den 10 km. Kazhdyj sledyushij den on yvelithival dliny probega na p procentov ot pridedyshego dnya. Vvedite p, pri yslovii: 0<p<50->"; 
  cin >> p;
  if ((p < 0) && (p > 50)) {
     cout << "Nepravilnoe znachenie";
     cin.get();
  }
 } while ((p > 0) || (p < 50));
 
 S = 10;
 n = 1;  
 
 while (S <= 200) {
  KM = ((p / 100) * S); 
  S = S + KM; 
  K = n++;
 } 
 
 cout << " kolithestvo dnej, za kotoroe probeg prevysel 200 km=" << K << endl; 
 cout << " symarnyj probeg za eti dni=" << S << endl; 
 
 return 0; 
}


Вот и пример. Юзер не напрягается насчет валидности данных и, к сожалению, программа должна это делать сама. Вроде так, если с выражением не перепутал.
#include <iostream>
#include <cmath> 
 
using namespace std;
 
int main() {
 int K, n; 
 float p, S, KM;
 do { 
  cout << "Sportsmen probezhal v pervyj den 10 km. Kazhdyj sledyushij den on yvelithival dliny probega na p procentov ot pridedyshego dnya. Vvedite p, pri yslovii: 0<p<50->"; 
  cin >> p;
  if ((p < 0) && (p > 50)) {
     cout << "Nepravilnoe znachenie";
     cin.get();
  }
 } while ((p > 0) || (p < 50));
 
 S = 10;
 n = 1;  
 
 while (S <= 200) {
  KM = ((p / 100) * S); 
  S = S + KM; 
  K = n++;
 } 
 
 cout << " kolithestvo dnej, za kotoroe probeg prevysel 200 km=" << K << endl; 
 cout << " symarnyj probeg za eti dni=" << S << endl; 
 
 return 0; 
}
программа вывод при любом вводимом значение,лишь условие


Юзер не напрягается насчет валидности данных и
ввел букву...


программа вывод при любом вводимом значение,лишь условие
ввел букву...
Облажался по полной... Вот сделал нормально:
Кликните здесь для просмотра всего текста
#include <iostream>
#include <cmath> 
#include <limits> 
 
using namespace std;
 
int main() {
 int K, n; 
 float p, S, KM;
 p = 0;
 cout << "Sportsmen probezhal v pervyj den 10 km. Kazhdyj sledyushij den on yvelithival dliny probega na p procentov ot pridedyshego dnya. Vvedite p, pri yslovii: 0<p<50->";
 while (!(cin >> p) || p < 1 || p > 50) {  
  cin.clear();
  cin.ignore(numeric_limits<streamsize>::max(), '\n');
  cout << "Invalid input.  Try again: ";
 }
 
 S = 10;
 n = 1;  
 
 while (S <= 200) {
  KM = ((p / 100) * S); 
  S = S + KM; 
  K = n++;
 } 
 
 cout << " kolithestvo dnej, za kotoroe probeg prevysel 200 km=" << K << endl; 
 cout << " symarnyj probeg za eti dni=" << S << endl; 
 
 return 0; 
}