Броят и н сумата на положителните

Да се въведат 4 числа и да се отпечата броят и н сумата на положителните.
Публикувано в 11а, 11в с етикети . Постоянна връзка.

8 коментара по Броят и н сумата на положителните

  1. maleboldjia каза:

    Ееее ударих го от земята това преобразуване на тия типове :D

    #include <cstdlib>
    #include <iostream>
    
    using namespace std;
    
    int main(int argc, char *argv[])
    {
    long a,b,c,d;
    cout<<"Vavedi purvoto chislo: "; cin>>a;
    cout<<"Vavedi vtoroto chislo: "; cin>>b;
    cout<<"Vavedi tretoto chislo: "; cin>>c;
    cout<<"Vavedi chetvurtoto chislo: "; cin>>d;
    cout<<endl;
    cout<<"Broyat na vuvedenite polojitelni chisla e: "<<
    bool(a>0)+
    bool(b>0)+
    bool(c>0)+
    bool(d>0)<<endl;
    
    if (a>0)
        a=a;
        else a=0;
    if (b>0)
        b=b;
        else b=0;
    if (c>0)
        c=c;
    	else c=0;
    if (d>0)
    	d=d;
    	else d=0;
    cout<<"Sumata na polojitelnite chisla e: "<<a+b+c+d<<endl;
    
    	system("pause");
    	return 0;
    }
    
    • Данаил каза:

      Браво, напредваш. Почти го удари в земята :-) Няма нужда от явно преобразуване обаче – дори да не укажеш такова, щом има аритметични операции компилатора ще извърши неявно преобразуване.

      Тоест вместо:

      cout<<bool(a>0)+bool(b>0)+bool(c>0)+bool(d>0)<<endl;

      Може да напишеш:

      cout<<(a>0)+(b>0)+(c>0)+(d>0)<<endl;

      И още вместо:

      if (a>0)
        a=a;
      else a=0;

      Може да ползваш:

      if (a<=0) a=0;

      Или още по-краткото и без условна команда

      cout<<a*(a>0)+b*(b>0)+c*(c>0)+d*(d>0)<<endl;
  2. LoL каза:
    #include <cstdlib>
    #include <iostream>
    
    using namespace std;
    
    int main(int argc, char *argv[])
    {
        long a,b,c,d;
    cout<<"Vavedete purvoto chislo: "<<endl; 
    cin>>a;
    cout<<"Vavedete vtoroto chislo: "<<endl; 
    cin>>b;
    cout<<"Vavedete tretoto chislo: "<<endl; 
    cin>>c;
    cout<<"Vavedete chetvurtoto chislo: "<<endl; 
    cin>>d;
    cout<<"Broqat na vuvedenite polojitelni chisla e:";
    cout<<(a>0)+(b>0)+(c>0)+(d>0)<<endl;
        if (a<=0) a=0;
        if (b<=0) b=0;
        if (c<=0) c=0;
        if (d<=0) d=0;
    cout<<"Sumata na polojitelnite chisla e: "<<a+b+c+d<<endl;
        system("PAUSE");
        return EXIT_SUCCESS;
    }
    
  3. Prizraka каза:

    int main(int argc, char *argv[])
    {
    long a,b,c,d;
    cout<>a;
    cout<>b;
    cout<>c;
    cout<>d;
    cout<<endl;
    cout<<"Broyat na vuvedenite polojitelni chisla e: "<0)+
    bool(b>0)+
    bool(c>0)+
    bool(d>0)<0)
    a=a;
    else a=0;
    if (b>0)
    b=b;
    else b=0;
    if (c>0)
    c=c;
    else c=0;
    if (d>0)
    d=d;
    else d=0;
    cout<<"Sumata na polojitelnite chisla e: "<<a+b+c+d<<endl;
    system("PAUSE");
    return EXIT_SUCCESS;
    }

  4. dreanor каза:
    #include <cstdlib>
    #include <iostream>
     
    using namespace std;
    int suma=0;
    int broi=0;
    int polojitelno (int a){
        if (a>0){ suma+=a; broi+=1; }
        }
     // funkciq prowerqwashta dali chisloto e polojitelno
     // i go pribawq kum sumata i broqt na polojitelnite
    int main(int argc, char *argv[])
    {
        int a,b,c,d;
        cout<<"Wuwedi chetiri chisla\n";
        cin>>a>>b>>c>>d;
        polojitelno(a);
        polojitelno(b);
        polojitelno(c);
        polojitelno(d);
        cout<<"Sumata na polojitelnite e "<<suma<<" a broq im e "<<broi<<endl;
    
        
        system("pause");
        return 0;
    }
    
    
    • Данаил каза:

      Калояне, задачата е вярна. Добре си се сетил и да ползваш глобални променливи, и да ги инициализираш.

      Но глобални променливи трябва да се използват за предаване на стойности от и към функции само в краен случай, защото може да направят една голяма програма с трудно откриваеми странични ефекти. Подсети ме да ти обясня и да ти дам примери. По принцип, разглеждай функцията като нещо с вход и изход – подаваш и нещо на входа, получаваш нещо на изхода, но функцията не помни нищо някъде другаде. Ако го помни, тогава едно извикване на функцията междувременно вече променя действието й и резултата, който ще върне. Тази функция става зависима от това колко пъти е извикана и от къде. Това са страничните ефекти, за които споменах. Ако функцията има само вход и изход и не помни нищо от предишните извиквания, тогава и от 1000 места да я извикаш, все ще си връща същия резултат.

      Конкретно за тази задача може да направиш функцията така:

      #include <cstdlib>
      #include <iostream>
        
      using namespace std;
      
      int polojitelno (int a, int &suma){ // сумата я предаваме като параметър, предаван по адрес
          int broi = (a>0); // ако е положително, преброяваме го
          if (broi) suma+=a;  // и го прибаваме към сумата
          return broi; 
          }
          
      int main(int argc, char *argv[])
      {
          int a,b,c,d, suma;
          cout<<"Wuwedi chetiri chisla\n";
          cin>>a>>b>>c>>d;
          suma=0; // инициализираме преди използването
          cout<<"Broiat na polojitelnite e "<<polojitelno(a, suma) +
                                              polojitelno(b, suma) +
                                              polojitelno(c, suma) +
                                              polojitelno(d, suma) << endl;
          cout<<"Sumata na polojitelnite e "<<suma<<endl;
       
           
          system("pause");
          return 0;
      }
      

      Или дори така:

      #include <cstdlib>
      #include <iostream>
        
      using namespace std;
      
      int polojitelno (int &suma){ 
          int a;
          cin>>a;             // въвеждаме си числото във функцията, защото не ни е нужно в главната програма
          int broi = (a>0);   // ако е положително, преброяваме го
          if (broi) suma+=a;  // и го прибаваме към сумата
          return broi; 
          }
          
      int main(int argc, char *argv[])
      {
          int suma;
          cout<<"Wuwedi chetiri chisla\n";
          suma=0; // инициализираме преди използването
          cout<<"Broiat na polojitelnite e "<<polojitelno(suma) +
                                              polojitelno(suma) +
                                              polojitelno(suma) +
                                              polojitelno(suma) << endl;
          cout<<"Sumata na polojitelnite e "<<suma<<endl;
       
           
          system("pause");
          return 0;
      }
      

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

Вашият коментар