Съпоставяне оператор за цикъл do и оператор while

оператор do
оператор while
цифра в число - оператор while
сума от цифри в число - оператор do while
сума от степени на 2 - оператор do while

И при двата цикъла do и while се следи изпълнение на логическо условие. При цикъл while проверката е в началото - цикъл с пред условие. При цикъл do проверката е в края - цикъл с пост условие.

  Нека разгледаме примерна задача с цел онагледяване логиката на работа и при двата цикъла.
  Основната цел и на двете задачи е обработване и съпоставяне цифрите на едно естествено число.
  И двете задачи следват подобни алгоритми.
  Взема се последната, най дясна цифра на числото. За определяне на цифрата се ползва целочислен остатък при делене на 10.
  Маха се последната цифра на числото - чрез целочислено делене на 10 и се съхранява целочисленото частно.
  Тези стъпки продължават, докато числото има стойност >0.
 

Начало на страницата

цифра в число - оператор while

  Задача 1: Имате въведено естествено число. Да се изведе най-малката и най голямата цифра в числото.
Следващата програма дава решен пример за цифра в число чрез оператор while:
#include <iostream> 
using namespace std; 

int main() 
{  long chis;
int Min, Max, cif; 
 cout<<"Da se systawi programa, chrez koqto se wywevda estestweno chislo\n";
  cout<<"ot interwala [1001..1000001]. Programata da izwede naj-malkata\n";
  cout<<"i naj-golqmata cifra w chisloto.\n";
  cout<<"Primer: 481395 Izhod 1, 9\n";
  cout<<"Wywedete chislo: ";    cin >> chis; 
  chis = abs(chis);  
  Min=chis%10;
  Max=Min;
  while (chis) 
  {  cif=chis%10;
    if(Min > cif)  Min = cif; 
    if(Max < cif)  Max = cif; 
     chis /= 10; //premahwame poslednata cifra ot wywedenoto chislo
  } // kraj while
  cout <<"Naj-malkata cifra w chisloto e: "<< Min << endl; 
  cout <<"Naj-golqmata cifra w chisloto e: "<< Max << endl; 
 system("pause");//ochakwa natiskane na klawish
return 0; 
}//kraj na programa while 

Начало на страницата

сума от цифри в число - оператор do while

  Задача 2: Имате въведено естествено число. Да се изведе сумата от цифрите на числото.
Следващата програма дава решен пример за сума от цифри в число чрез оператор while:
  #include <iostream> 
 using namespace std; 

 int main() 
 {  long chis;
  int sum=0; //deklarirane i nachalna inicializaciq
  cout<<"Da se systawi programa, chrez koqto se wywevda estestweno chislo\n";
  cout<<"ot interwala [1001..1000001]. Programata da izwede sumata ot\n";
  cout<<"wsichki cifri w chisloto.\n";
  cout<<"Primer: 481395 Izhod 30\n";
  cout<<"Wywedete chislo: ";    cin >> chis; 
  chis = abs(chis); 
    do 
   {  sum+=chis%10;
      chis /= 10; //premahwame poslednata cifra ot wywedenoto chislo
   }  while(chis);// kraj do while
   cout <<"Natrupana suma ot cifrite na chisloto: "<< sum << endl; 
 system("pause");//ochakwa natiskane na klawish
 return 0; 
}//kraj na programa do while 

Начало на страницата

сума от степени на 2 - оператор do while

Да разгледаме следната примерна задача: Имаме въведено естествено число N от интервала [1..255]. Трябва да се изведат онези степени на числото 2, чиято сума е точно въведеното число.

Алгоритъм:
   Броят и вида на степените на 2 са точно цифрите 1 в двоичния запис на числото.
   Тук ще използваме побитова операция за преместване разрядите на числото x=x<<1. Операцията е същата по резултат както x/=2, но е по-бърза.
   Макрос define fl_x (1 << i) за проверка дали последната цифра в двоичния запис на числото е 1
   Цикъл while за последователно делене числото на 2;
   Два вложени цикъла do while:
   Вътрешен цикъл do while - за проверка коректност на входни данни
   Външен цикъл do while - за многократно въвеждане на входни данни
 
   Следващата програма дава решен пример за представяне на естествено число като сума от степени на 2 чрез оператор do и while
#include <iostream>
using namespace std;
int i;

#define fl_x (1 << i)

void stepeni (int fl)
{int x=1;
 i=0;
 while (i<fl) 
 { if (fl & fl_x) {cout<<"2^"<<i<<" = "<<x<<endl;fl-=x;}
    i++;
  x=x<<1;//s tazi stepen na 2 she reducirame chisloto
  }// while 
}
int main ()
  {int a;
  char ose;
  cout<<"Imate estestweno chilso N ot interwala [0..255].\n";
  cout<<"Da se systwai programa, chrez koqto se izwevdat wsichki\n";
  cout<<"stepeni na 2, chiqto suma formira chisloto N.\n";
  cout<<"Pirmer: 45 Izhod: 1 4 8 32\n"; 
  do {//wynshen cikyl do 
  do { // wloven cikyl do 
   cout<<"Wywedete chislo ot interwala [0..255]: ";cin>>a;
  }while (a>256 || a<0);//zashita po whod
  cout<<"Wywedenoto chislo se predstawq kato suma ot: "<<endl;
  stepeni(a);
   cout<<"She wywevdate li drugi chisla <y/n>: ";cin>>ose;
} while (ose=='y');// wynshen do while 
 system ("pause");
 return 0;
}//kraj na progarma do while  

Задачи с подобни функции и служебни думи са разгледани в страницата с електронни уроци по информатика - програмиране.
Илюстриране работата на характерни алгоритми можете да намерите в предоставените електронни помагала съдържащи решени примери.

Начало на страницата

 
Размер на шрифта
Increase Font Size Option 3 Reset Font Size Option 3 Decrease Font Size Option 3
Bulgarian Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish
Търсене в сайта: