duminică, 3 noiembrie 2013

Instructiunea de selectie switch



Structura alternativa  de selectie dirijeaza executia unei secvente de instructiuni (S1,S2,...,Sn) in functie de valoarea unui selector.
Instrucţiunea SWITCH:
Sintaxă: switch (selector)
       { case V1: instructiune S1; break;
          case V2: instructiune S2; break;
          ...
          case Vn: instructiune Sn; break;
default: instructiune Sn+1;
                          }
           unde: selector este o expresie de tip int sau char,
V1-Vn sunt expresii constante de acelaşi tip cu expresia selector.
S1,S2,…,Sn,Sn+1 reprezinta secvente de instructiuni
 Clauza default este opţională.
Mod de funcţionare: instrucţiunea dirijează execuţia unei secvenţe de instrucţiuni în funcţie de valoarea unui selector (se va executa instrucţiunea corespunzătoare valorii selectorului, iar dacă valoarea nu apare în listă atunci se execută instrucţiunea de pe ramura default – în cazul în care există). Dacă pe una din ramuri de doresc includerea mai multor instrucţiuni, acestea vor fi grupate într-o instrucţiune compusă.
Exemplu:
cin>>x;
switch (x)
       { case 1: cout<<”s-a introdus valoarea 1”; break;
          case 2: cout<<”s-a introdus valoarea 2”; break;
          case 3: cout<<”s-a introdus valoarea 3”; break;
          default: cout<<”s-a introdus altceva”;
                          }


Se cunosc lungimea şi lăţimea unei suprafeţe în formă dreptunghiulară. Se doreşte realizarea unui program C++ cu un meniu în care atunci când se va tasta 1 să se afişeze perimetrul suprafeţei, când se tastează 2 să se afişeze aria iar când se tastează 3 să se afişeze diagonala suprafeţei. Se va verifica şi corectitudinea introducerii datelor.
Programul este scris şi pe tablă în timp ce elevii lucrează individual pe calculator.
#include <iostream>
#include <math.h>
using namespace std;
int main()
{
  float lung, lat, p, a, d;
  int optiune;
{   cout<<"lungimea = "; cin>>lung;
    cout<<"latimea = "; cin>>lat;
if ((lung<=0) || (lat<=0))
   cout<<"nu ati introdus corect laturile";
else
     {  p=2*lung+2*lat; a=lung*lat; d= sqrt(lung*lung+lat*lat);
     cout<<"1. perimetru\n";
  cout<<"2. arie\n";
  cout<<"3. diagonala\n";
  cout<<"4. lalele\n";
  cout<<"optiune= ";
  cin>>optiune;
 switch (optiune)
             { case 1: cout<<"perimetrul= "<<p;break;
                case 2: cout<<"aria=" <<a;break;
                case 3: cout<<"diagonala= "<<d;break;
                case 4:cout<<"nr lalele="<<a*100;break;
                default: cout<<"optiune invalida";
               }
         }
  }


completarea algoritmului cu afişarea numărului de bulbi de lalea care pot fi plantaţi pe întreaga suprafaţă(la apăsarea tastei 4) dacă se cunoaşte faptul că dimensiunile suprafeţei sunt date în metri şi că fiecărei lalele îi sunt necesari 10cm2.
Se va discuta la tablă modul de realizarea al acestei cerinţe. Modificarea va fi în mesajul explicativ al meniului şi în cadrul instrucţiunii switch, astfel:
switch (optiune)
             { case 1: cout<<”perimetrul= ”<<p; break;
                case 2: cout<<”aria= ”<<a; break;
                case 3: cout<<”diagonala= ”<<d; break;
                case 4: cout<<”numar de lalele= ”<<a*100; break;
                default: cout<<”optiune invalida”;
               }

tema pentru acasa:
Problemele 1 şi 2 de la pagina 23 din manual