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

Добрый вечер! Проверьте, пожалуйста, если можете, правильность написания кода программы для следующей задачи:Спортсмен-лыжник начал тренировки, пробежав в первый день 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?
"Защита от дурака", знаете такой принцип? Вы должны построить программу так, чтобы дурак(юзер) не мог её разрушить.


<a rel="nofollow noopener noreferrer" href="http://ru.wikipedia.org/wiki/%D0%97%D0%B0%D1%89%D0%B8%D1%82%D0%B0_%D0%BE%D1%82_%D0%B4%D1%83%D1%80%D0%B0%D0%BA%D0%B0" target="_blank" title="http://ru.wikipedia.org/wiki/%D0%97%D0%B0%D1%89%D0%B8%D1%82%D0%B0_%D0%BE%D1%82_%D0%B4%D1%83%D1%80%D0%B0%D0%BA%D0%B0">"Защита от дурака"</a>, знаете такой принцип?
безусловно. но я же написала 0 не входит в промежуток,т.е его не нужно вводить.
<a rel="nofollow noopener noreferrer" href="http://ru.wikipedia.org/wiki/%D0%97%D0%B0%D1%89%D0%B8%D1%82%D0%B0_%D0%BE%D1%82_%D0%B4%D1%83%D1%80%D0%B0%D0%BA%D0%B0" target="_blank" title="http://ru.wikipedia.org/wiki/%D0%97%D0%B0%D1%89%D0%B8%D1%82%D0%B0_%D0%BE%D1%82_%D0%B4%D1%83%D1%80%D0%B0%D0%BA%D0%B0">"Защита от дурака"</a>, знаете такой принцип? Вы должны построить программу так, чтобы дурак(юзер) не мог её разрушить.
ну так помоги тогда сделать как-то по-другому.


безусловно. но я же написала 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; 
}


Вот и пример. Юзер не напрягается насчет валидности данных и, к сожалению, программа должна это делать сама. Вроде так, если с выражением не перепутал. <div> <pre class="prettyprint linenums">#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; }</pre> </div>
программа вывод при любом вводимом значение,лишь условие


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


программа вывод при любом вводимом значение,лишь условие
ввел букву...
Облажался по полной... Вот сделал нормально:
Кликните здесь для просмотра всего текста
#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; 
}