Триъгълник от знаци - рекурсия и цикъл

триъгълник от знаци с цикъл - ляв низходящ
триъгълник от знаци с рекурсия - ляв низходящ
триъгълник от знаци с цикъл - ляв възходящ
триъгълник от знаци с рекурсия - ляв възходящ
триъгълник от знаци с цикъл - десен възходящ
триъгълник от знаци с рекурсия - десен възходящ
триъгълник от знаци с цикъл - десен низходящ
триъгълник от знаци с рекурсия - десен низходящ

Алгоритмите за съставяне и извеждане на триъгълник от знаци наричан още триъгълник от числа, числов триъгълник често се падат като задачи за проверка и оценка. Причината е, че еднозначно и ясно илюстрират знанията и уменията за работа с вложен цикъл и/или съставна рекурсия. Най-често условието на задачата налага извежда на правоъгълен триъгълник от знаци, представени като възходяща или низходяща последователност.

Нека разгледаме общото в такива задачи:
Извежданата последователност винаги е наредена, т.е. редицата е монотонна (твърдението се отнася за правоъгълни триъгълници).
Дали ще се извеждат цифри или знаци не е от съществено значение – използва се наредбата в ASCII стандарта.
Всеки от правоъгълните триъгълници се извежда с два итеративни цикъла или със съставна рекурсия, или с комбинация от итерация и рекурсия.
Външният цикъл / рекурсия извежда триъгълника по редове.
Вътрешният цикъл / рекурсия извежда знаците за текущия ред.
Правоъгълните триъгълници в общия вид са 4: върхът нагоре, хипотенузата надясно; върхът нагоре, хипотенузата наляво; върхът надолу, хипотенузата надясно; върхът надолу, хипотенузата наляво. Когато хипотенузата е отляво се налага използване на допълнителен цикъл за реализиране на отместването. Чрез този допълнителен вложен цикъл се извеждат само интервали – празен символ. Следват примерни решения за всеки от споменатите триъгълници от знаци. За всеки от видовете числови триъгълници са дадени итеративен и рекурсивен варинат.

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

триъгълник от знаци с цикъл - ляв низходящ


#include <iostream>
using namespace std;

int main()//nachalo na programata
{char n,c,d,m='A';//deklarirat se promenliwi ot tipa char
//w gorniq red e priswoena stojnost na m='A'- winagi se zapochwa ot bukwa A
cout<<"Da se systawi programa, koqto po wywedena glawna bukwa izwevda"<<endl;
cout<<"rawnobedren prawoygylen triygylnik s bukwi, kato pri towa na pyrwiq red"<<endl;
cout<<"sa izwedeni wsichki bukwi ot A do wywedenata, na posledniq samo A."<<endl;
cout<<"Primer D Izhod:\n"<<endl;
cout<<"ABCD"<<endl;
cout<<"ABC"<<endl;
cout<<"AB"<<endl;
cout<<"A"<<endl;
cout<<"Wywedete glavna bukva w ineterwala E-Z: ";
cin>>n;//wywevda se krajnata bukwa
// pri deklarirane m='A';
for (c=m; c<=n; c++) //otpechatwane na wsichki redowe
{//cikyl s dwa wloveni cikyla:1) poredna - wywedena i 2) "A"- poredna-1
 for (d=m; d<=n-c+m; d++)
  { cout<<d; }//pechat ot dostignatata bukwa do wywedenata bukwa
   cout<<"\n";//now red
 }//kraj na wynshniq cikyl
 system("pause");
return 0; 
} //kraj na programa triygylnik ot znaci  

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

триъгълник от знаци с рекурсия - ляв низходящ


#include <iostream>
using namespace std;

void pechat_red(char n, char m)
{if(n>=m)
{ cout<<m;
 m++;
 pechat_red(n,m);//rekursiwno izwikwane na reda
}//if
}// pechat red ot triygylnik 

void triygylnik (char n, char m) 
{ if(n>=m)
 { pechat_red(n,m);
   cout<<endl;
   triygylnik (n-1,m);// rekursiq - izwikwane
}//if
}//pechat  triygylnik 

int main () //nachalo na programata
{ char n,m='A';
   cout<<"Da se systawi programa, chrez koqto se izwevda triygylnik ot\n";
   cout<<"znaci. Pyrwiqt red na trigylnika zapochwa s A i zawyrshwa s \n";
   cout<<"wywedeniq znak.Wseki sledwash red krajniq znak e s 1 po-malyk.\n";
   cout<<"Da se izpolzwa rekursiwna funkciq.\n";
   cout<<"Primer D Izhod:\n";
   cout<<"ABCD\n";
   cout<<"ABC\n";
   cout<<"AB\n";
   cout<<"A\n";
  do {
    cout<<"Wywedete bukwa [B..Z]: ";cin>>n;
   } while (n<'B' || n>'Z');
//pri deklarirane m='A';
   triygylnik (n,m);//izwevda triygylnik 
system("pause");
return 0;
}//kraj na programa triygylnik ot znaci 

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

триъгълник от знаци с цикъл - ляв възходящ


#include <iostream>
using namespace std;

int main()//nachalo na programata
{char n,c,d,m='A';//deklarirat se promenliwi ot tipa char
//w gorniq red e priswoena stojnost na m='A'- winagi se zapochwa ot bukwa A
cout<<"Da se systawi programa, koqto po wywedena glawna bukwa se izwevda"<<endl;
cout<<"prawoygylen triygylnik s bukwi, kato pri towa na posledniq red"<<endl;
cout<<"sa izwevdat wsichki bukwi ot A do wywedenata."<<endl;
cout<<"Pri wywedena bukwa D rezultatyt she byde: "<<endl;
cout<<"A"<<endl; 
cout<<"AB"<<endl;
cout<<"ABC"<<endl;
cout<<"ABCD"<<endl;
cout<<"Wywedete glavna bukva w interwala E-Z: ";
cin>>n;//wywevda se krajnata bukwa
//pri deklarirane m='A';
 for (c=m; c<=n; c++) //otpechatwane na wyzmovnite warianti /permutacii
 {//cikyl s dwa wloveni cikyla:1) poredna - wywedena i 2) "A"- poredna-1
  for (d=m; d<=c; d++)
    {cout<<d; }//pechat ot dostignatata bukwa do wywedenata bukwa
    cout<<"\n";//now red
  }//kraj na wynshniq cikyl
 system("pause");
 return 0; 
} //kraj na programa triygylnik ot znaci 

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

триъгълник от знаци с рекурсия - ляв възходящ


#include <iostream>
using namespace std;

void pechat_red(char n, char m)
{ if(n>=m)
{ cout<<m;
  m++;
  pechat_red(n,m);//rekursiq - izwikwane red
 }//if
}// rekusiq pechat red 

void triygylnik (char n, char m, char p)
{ if(p<=n)
  { pechat_red(p,m);
   cout<<endl;
    triygylnik (n,m,p+1);// rekutsiq - izwikwane 
  }//if
}// rekursiq triygylnik 

int main () 
{char n,p,m='A';
  cout<<"Da se  systawi programa, koqto po wywedena glawna bukwa se izwevda"<<endl;
  cout<<"prawoygylen  triygylnik s bukwi, kato pri towa na posledniq red"<<endl;
  cout<<"sa  izwevdat wsichki bukwi ot A do wywedenata."<<endl;
  cout<<"Pri wywedena bukwa D rezultatyt she byde: "<<endl;
  cout<<"A"<<endl;
  cout<<"AB"<<endl;
  cout<<"ABC"<<endl;
  cout<<"ABCD"<<endl;
  cout<<"Da se izpolzwa rekursiwna funkciq.\n";
   do {
   cout<<"Wywedete bukwa [B..Z]: ";cin>>n;
 } while (n<'B' || n>'Z');
  p=m; //pri deklarirane m='A';
  triygylnik (n,m,p );
system("pause");
return 0;
}//kraj na programa triygylnik ot znaci 

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

триъгълник от знаци с цикъл - десен възходящ


#include<iostream>
using namespace std;

int main()
{ char a,b,n,m='A'; //deklarirane na promenliwite
  //w gorniq red e priswoena stojnost na m='A'- winagi se zapochwa ot bukwa A
  cout<<"Da se systawi programa, koqto po wywedena glawna bukwa se izwevda"<<endl;
  cout<<"prawoygylen triygylnik s bukwi, kato pri towa na posledniq red"<<endl;
  cout<<"sa izwevdat wsichki bukwi ot wywedenata do A."<<endl;
  cout<<"Pri wywedena bukwa D rezultatyt she byde: "<<endl;
  cout<<"   A\n";
  cout<<"  BA\n";
  cout<<" CBA\n";
  cout<<"DCBA\n";
   //pri deklarirane m='A';//    cout<<"Wywedete nachalen simwol: ";cin>>m;
  cout<<"Wywedete kraen simwol: ";cin>>n;
  for (a=m;a<=n;a++)
   {//nachalo na cikyl a namalqwa ot krajniq kym nachalniq
     for (b=n;b>=m;b--)
      {//nachalo na cikyl b namalqwa ot krajniq do znachenieto na a
       if (b>=a+1) {cout<<" ";}
      else {cout<<b;}//pechata po 2 interwala
    }//kraj na cikyl b
      cout<<endl;//otiwa na sledwashiq red
     }//kraj na cikyl a
  system("pause");
  return 0; 
} //kraj na programa triygylnik znaci 

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

триъгълник от знаци с рекурсия - десен възходящ


#include <iostream>
using namespace std;

void pechat_prazno(char n, char p)
 { if(n>p)
  { cout<<" ";
     n--;
     pechat_prazno (n,p);//rekursiq -  izwikwane na reda
 }//if
}// rekursiq  pechat interwali

void pechat_red(char n, char m)
{ if(n>=m)
 { cout<<n;
   n--;
   pechat_red(n,m);// rekursiq izwikwane na reda
 }//if
}// rekursiq pechat red 

void triygylnik (char n, char m, char p)
{ if(p<=n)
 { pechat_prazno(n,p);//rekusiq za interwali w tekushiq red
   pechat_red(p,m);//rekursiq za znaci w tekushiq red
   cout<<endl;
   p++;
   triygylnik (n,m,p);//rekutsiq - izwikwane za sledwash red
  }//if
}// rekursiq - triygylnik 
 
int main () 
{ char n,p,m='A';
//w gorniq red e priswoena stojnost na m='A'- winagi se zapochwa ot bukwa A
  cout<<"Da se systawi programa, koqto po wywedena glawna bukwa se izwevda"<<endl;
  cout<<"prawoygylen triygylnik s bukwi, kato pri towa na posledniq red"<<endl;
  cout<<"sa izwevdat wsichki bukwi ot wywedenata do A."<<endl;
  cout<<"Pri wywedena bukwa D rezultatyt she byde: "<<endl;
  cout<<"   A\n";
  cout<<"  BA\n";
  cout<<" CBA\n";
  cout<<"DCBA\n";
  //pri deklarirane m='A';//     cout<<"Wywedete nachalen simwol: ";cin>>m;
  cout<<"Da se izpolzwa rekursiwna funkciq.\n";
 do {
 cout<<"Wywedete bukwa [B..Z]: ";cin>>n;
 } while (n<'B' || n>'Z');
  p=m='A';
  triygylnik (n,m,p );
 system("pause");
return 0;
}//kraj na programa triygylnik rekursiq 

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

триъгълник от знаци с цикъл - десен низходящ


#include<iostream>
using namespace std;

int main()
{ char a,b,n,m='A'; //deklarirane na promenliwite
//w gorniq red e  priswoena stojnost na m='A'- winagi se zapochwa ot bukwa A
  cout<<"Da se systawi programa, koqto po wywedena glawna bukwa se izwevda"<<endl;
  cout<<"prawoygylen triygylnik s bukwi, kato pri towa na pyrwiq red"<<endl;
  cout<<"sa izwevdat wsichki bukwi ot wywedenata do A."<<endl;
  cout<<"Pri wywedena bukwa D rezultatyt she byde: "<<endl;
  cout<<"DCBA\n";
  cout<<" CBA\n";
  cout<<"  BA\n";
  cout<<"    A\n";
  cout<<endl;
  //pri deklarirane m='A';//     cout<<"Wywedete nachalen simwol: ";cin>>m;
 cout<<"Wywedete kraen znak: ";cin>>n;
 for (a=n;a>=m;a--)
 {//nachalo na cikyl a namalqwa ot posledniq kym pyrwiq
  for (b=n;b>=m;b--)
  {//nachalo na cikyl b namalqwa ot posledniq do znachenieto na a
    if (b<=a) {cout<<b;}
    else {cout<<" ";}//po 2 broq lewite interwali
   }//kraj na cikyl b
   cout<<endl;//otiwa na sledwashiq red
   }//kraj na cikyl a
  system("pause");
 return 0; 
} //kraj na programa triygylnik ot znaci 

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

триъгълник от знаци с рекурсия - десен низходящ

#include <iostream>
using namespace std;

void pechat_prazno(char n, char p)
{  if(n<p)
 { cout<<" ";
    n++;
   pechat_prazno(n,p);//rekursiq - izwikwane na reda
 }//if
}// rekursiq  pechat interwal

void pechat_red(char n, char m)
{  if(m<=n)
  { cout<<n;
   n--;
   pechat_red(n,m);//rekursiwno izwikwane na reda
 }//if
}// pechat red ot triygylnik 

void triygylnik (char n, char m, char p)
{  if(n>=m)
  { pechat_prazno(n,p);
     pechat_red(n,m);
     cout<<endl;
     n--;
     triygylnik (n,m,p);//rekutsiq izwikwane
 }//if
}// rekursiq triygylnik 

int main () //nachalo na programata
{ char n,p,m='A';
//w gorniq red e priswoena stojnost na m='A'- winagi se zapochwa ot bukwa A
  cout<<"Da se systawi programa, koqto po wywedena glawna bukwa se izwevda"<<endl;
  cout<<"prawoygylen triygylnik s bukwi, kato pri towa na pyrwiq red"<<endl;
  cout<<"sa izwevdat wsichki bukwi ot wywedenata do A."<<endl;
  cout<<"Pri wywedena bukwa D rezultatyt she byde: "<<endl;
  cout<<"DCBA\n";
  cout<<" CBA\n";
  cout<<"  BA\n";
  cout<<"   A\n";
  cout<<"Da se izpolzwa rekursiwna funkciq.\n";
  //pri deklarirane m='A';//     cout<<"Wywedete nachalen simwol: ";cin>>m;
   do {
    cout<<"Wywedete bukwa [B..Z]: ";cin>>n;
 } while (n<'B' || n>'Z');
   p=n;
 triygylnik (n,m,p);
system("pause");
return 0;
}//kraj na programa triygylnik ot znaci 

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

 
Размер на шрифта
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
Търсене в сайта: