Проверка на входни данни от указан числов интервал
За коректната работа на всяка програма се изисква проверка на входни данни - въведените стойности да са в предварително указан числов интервал.
Проверката, валидизирането на въведените входни данни е често срещана част от програмните продукти.
В случая е по-удачно използването на цикъл do-while така проверката се осъществява след въвеждането на данните и продължава, докато не се изпълни условието.
Ще разгледаме следните два варианта:
а) проверка дали въведените входни данни са в предварително указан числов интервал
б) проверка дали въведените входни данни са извън предварително указан числов интервал
Следващата примерна програма дава решена задача за проверка на входни данни за указан числов интервал по двете условия поотделно:
#include<iostream>
using namespace std;
const int Min=10, Max=100;//gorna i dolna granica na chislow interwal
int main() //nachalo na programata
{//nachalo na programata
int c,d;
cout<<"Da se systawi programa, chrez koqto izwyrshwa prowerka po wqhod\n";
cout<<"prowqwa se izpylnenie na uslowie za 2 chisla:\n";
cout<<"a) dali prinadlevat na daden chislow interwal; \n";
cout<<"b) dali ne prinadlevat na daden chislow interwal.\n";
cout<<"Wywevdaneto prodylvawa dokato ne se izpylnqt postawenite iziskwaniq.\n";
cout<<"Sledwashite stojnosti da sa w ukazaniq interwal:\n";
do
{cout<<"Wywedete chislitel [10..100]: ";cin>>c;
cout<<"Wywedete znamenatel [10..100]: ";cin>>d;
} while ((c<Min || c>Max) || (d<Min || d>Max));
cout<<"Stojnostta na drob "<<c<<"/"<<d<<" = "<<(double) c/d<<endl;
cout<<"Sledwashite stojnosti da sa izwyn ukazaniq interwal:\n";
do
{cout<<"Wywedete sybiraemo 1 [10..100]: ";cin>>c;
cout<<"Wywedete sybiraemo 2 [10..100]: ";cin>>d;
} while ((c>=Min && c<=Max ) || ( d>=Min && d<=Max));
cout<<"Sumata mevdu "<<c<<" + "<<d<<" = "<< c+d<<endl;
system("pause");//chaka natiskane na klawish
return 0;//osbovdawa zaetite sistemni resursi i wrysha kod na greshka 0
}//kraj na programa chislow interwal
Следващата примерна програма извършва проверката по двете условия поотделно чрез функции.
Използва се указател към 2 променливи, т.к. функцията връща само една стойност. Не е необходима начална инициализация на променливите, защото алгоритъмът изисква първо въвеждане на стойности и едва след това проверка и обработка с тези данни.
#include<iostream>
using namespace std;
const int Min=10, Max=100;//gorna i dolna granica na chislow interwal
void wytre(int &c, int &d)
{ do
{cout<<"Wywedete chislitel [10..100]: ";cin>>c;
cout<<"Wywedete znamenatel [10..100]: ";cin>>d;
} while ((c<Min || c>Max) || (d<Min || d>Max));
}
void wyn(int &c, int &d)
{ do
{cout<<"Wywedete sybiraemo 1 [10..100]: ";cin>>c;
cout<<"Wywedete sybiraemo 2 [10..100]: ";cin>>d;
} while ((c>=Min && c<=Max ) || ( d>=Min && d<=Max));
}
int main() //nachalo na programata
{
int c,d;
cout<<"Da se systawi programa, chrez koqto izwyrshwa prowerka po wqhod\n";
cout<<"prowqwa se izpylnenie na uslowie za 2 chisla:\n";
cout<<"a) dali prinadlevat na daden chislow interwal; \n";
cout<<"b) dali ne prinadlevat na daden chislow interwal.\n";
cout<<"Wywevdaneto prodylvawa dokato ne se izpylnqt postawenite iziskwaniq.\n";
cout<<"Sledwashite stojnosti da sa w ukazaniq interwal:\n";
wytre(c, d);
cout<<"Stojnostta na drob "<<c<<"/"<<d<<" = "<<(double) c/d<<endl;
cout<<"Sledwashite stojnosti da sa izwyn ukazaniq interwal:\n";
wyn(c, d);
cout<<"Sumata mevdu "<<c<<" + "<<d<<" = "<< c+d<<endl;
system("pause");//chaka natiskane na klawish
return 0;//osbovdawa zaetite sistemni resursi i wrysha kod na greshka 0
}//kraj na programa chislow interwal
Обяснени и решени задачи с подобни алгоритми, функции и служебни думи са разгледани в страницата с електронни уроци по информатика - програмиране.
Илюстриране работата на характерни алгоритми можете да намерите в предоставените електронни помагала съдържащи решени задачи, примери.
Начало на страницата