Elektroda.pl
Elektroda.pl
X
Proszę, dodaj wyjątek www.elektroda.pl do Adblock.
Dzięki temu, że oglądasz reklamy, wspierasz portal i użytkowników.

sumowanie liczb w tablicy PILNE c++

mydor 31 Paź 2010 09:57 2272 6
  • #1 31 Paź 2010 09:57
    mydor
    Poziom 8  

    Witam. Mam problem z sumowaniem liczb parzystych i nieparzystych w moim programie. Według mnie jest wszystko dobrze ale i tak źle sumuje. Pomożecie??Z góry dzieki

    Code:

    #include<iostream.h>
    #include<conio.h>
    #include<string.h>



    main(){


     string tekst,cyfry,znaki;
     int i,dl;

     cout<<"podaj ciag znakow : ";
     getline(cin,tekst);
     dl=tekst.length();
     for(i=0;i<dl;++i)
     {
      if(tekst[i]>='0' && tekst[i]<='9')
       cyfry+=tekst[i];
      else znaki+=tekst[i];
     }

     cout<<"znaki : "<<znaki<<endl;
     cout<<"cyfry : "<<cyfry<<endl;
     //--------------------------------------
     int dl2=cyfry.length(),tab[100],ilenp=0,ilep=0,sumap=0,sumanp=0;
     for(int i=0;i<dl2;i++)
     {tab[i]=cyfry[i];}
     for(int i=0;i<dl2;i++)
     {
      if(tab[i]%2==0)
       {
        ilep=ilep+1;
        sumap=sumap+tab[i];   //parzystych
       }
      else
       {
        ilenp=ilenp+1;
        sumanp=sumanp+tab[i]; //nieparzystych
       }
     }
     cout << "\nIlosc liczb parzystych: " << ilep;
     cout << "\nIlosc liczb nieparzystych: " << ilenp;
     cout << "\nSuma liczb parzystych: " << sumap;
     cout << "\nSuma liczb nieparzystych: " << sumanp;
     //------------------------------------
     int dl3=znaki.length(),ilesam=0,ilesp=0;
     for (int i=0;i<dl3;i++)
     {
      switch(znaki[i])
      {
       case 'A' : ilesam=ilesam+1; break;
       case 'E' : ilesam=ilesam+1; break;
       case 'I' : ilesam=ilesam+1; break;
       case 'O' : ilesam=ilesam+1; break;
       case 'U' : ilesam=ilesam+1; break;
       case 'Y' : ilesam=ilesam+1; break;
       case 'a' : ilesam=ilesam+1; break;
       case 'e' : ilesam=ilesam+1; break;
       case 'i' : ilesam=ilesam+1; break;
       case 'o' : ilesam=ilesam+1; break;
       case 'u' : ilesam=ilesam+1; break;
       case 'y' : ilesam=ilesam+1; break;
       default : ilesp=ilesp+1; break;
      }
     }
     cout << "\nIlosc samoglosek: " << ilesam;
     cout << "\nIlosc spolglosek: " << ilesp;
     
            getch();
    }

    0 6
  • #2 31 Paź 2010 23:37
    Eagle
    Poziom 23  

    Witam,

    Podaj przykład co wprowadzasz i jaki jest wynik

    0
  • #3 01 Lis 2010 07:24
    ed-ek
    Poziom 34  

    Przeanalizuj podany kod:

    Code:

    #include <iostream>
    #include <conio.h>
    using namespace std;
    int main()
    {
      string tekst,cyfry="",znaki="";
     int i,dl,ile_cyfr=0,ile_p=0,ile_np=0,suma_p=0,suma_np=0;

     cout<<"podaj ciag znakow : ";
     getline(cin,tekst);
     dl=tekst.length();
     for(i=0;i<dl;++i)
     {
      if(tekst[i]>='0' && tekst[i]<='9')
       {     
         ile_cyfr++;
         if((tekst[i]-48) % 2==0){ile_p++;suma_p=suma_p+tekst[i]-48;}
         else {ile_np++;suma_np=suma_np+tekst[i]-48;}
         cyfry+=tekst[i];   
       }
       else znaki+=tekst[i];
     }
       cout<<"ilosc parzystych= "<<ile_p<<endl;
       cout<<"ilosc nieparzystych= "<<ile_np<<endl;
       cout<<"suma liczb parzystych= "<<suma_p<<endl;
       cout<<"suma liczb nieparzystych= "<<suma_np<<endl;
     cout<<"znaki : "<<znaki<<endl;
     cout<<"cyfry : "<<cyfry<<endl;
     //--------------------------------------
     int dl2=cyfry.length(),tab[100],ilenp=0,ilep=0,sumap=0,sumanp=0;
     for(int i=0;i<dl2;i++)
     {tab[i]=cyfry[i];}
    /* for(int i=0;i<dl2;i++)
     {
      if(tab[i]%2==0)
       {
        ilep=ilep+1;
        sumap=sumap+tab[i];   //parzystych
       }
      else
       {
        ilenp=ilenp+1;
        sumanp=sumanp+tab[i]; //nieparzystych
       }
     }
     cout << "\nIlosc liczb parzystych: " << ilep;
     cout << "\nIlosc liczb nieparzystych: " << ilenp;
     cout << "\nSuma liczb parzystych: " << sumap;
     cout << "\nSuma liczb nieparzystych: " << sumanp;
    */
     //------------------------------------
     int dl3=znaki.length(),ilesam=0,ilesp=0;
     for (int i=0;i<dl3;i++)
     {
      switch(znaki[i])
      {
       case 'A' : ilesam=ilesam+1; break;
       case 'E' : ilesam=ilesam+1; break;
       case 'I' : ilesam=ilesam+1; break;
       case 'O' : ilesam=ilesam+1; break;
       case 'U' : ilesam=ilesam+1; break;
       case 'Y' : ilesam=ilesam+1; break;
       case 'a' : ilesam=ilesam+1; break;
       case 'e' : ilesam=ilesam+1; break;
       case 'i' : ilesam=ilesam+1; break;
       case 'o' : ilesam=ilesam+1; break;
       case 'u' : ilesam=ilesam+1; break;
       case 'y' : ilesam=ilesam+1; break;
       default : ilesp=ilesp+1; break;
      }
     }
     cout << "\nIlosc samoglosek: " << ilesam;
     cout << "\nIlosc spolglosek: " << ilesp;
     getch();
    return 0;
    }

    Fcję liczenia samogłosek możesz uprościć, zmieniając tekst na duże litery.

    0
  • #4 01 Lis 2010 10:15
    mydor
    Poziom 8  

    Przerobiłem to na swój sposób ale niewiem dlaczego tam jest to -48?

    Code:

     int dl2=cyfry.length(),tab[100],ilenp=0,ilep=0,sumap=0,sumanp=0;
     for(int i=0;i<dl2;i++)
     {tab[i]=cyfry[i];}
     for(int i=0;i<dl2;i++)
     {
      if(tab[i]%2==0)
       {
        ilep=ilep+1;
        sumap=sumap+tab[i]-48;   //parzystych
       }
      else
       {
        ilenp=ilenp+1;
        sumanp=sumanp+tab[i]-48; //nieparzystych
       }
     }
     cout << "\nIlosc liczb parzystych: " << ilep;
     cout << "\nIlosc liczb nieparzystych: " << ilenp;
     cout << "\nSuma liczb parzystych: " << sumap;
     cout << "\nSuma liczb nieparzystych: " << sumanp;

    0
  • #5 01 Lis 2010 17:39
    ed-ek
    Poziom 34  

    Cytat:

    Przerobiłem to na swój sposób ale niewiem dlaczego tam jest to -48?

    Kod cyfry 0 w ASCI wynosi 30 heks;48 dec. Można też napisać:
    tab[i]-'0';

    0
  • #6 01 Lis 2010 17:46
    mydor
    Poziom 8  

    no tak ale czemu odejmować akurat 0? co to zero dokładnie robi??nie da się tego jakoś zmienić?


    Bo jak zrobie bez tego -48 i wpisze dwie parzyste liczby 2 i 2 to suma wynosi 100

    Code:

    sumap=sumap+tab[i]

    tak jak tutaj do liczby pierwszej w tym wypadku jak podałem 2 dodaje tab[i] czyli kolejna liczbę z tablicy czyli 2 no to powinno wyjść 4 a nie 100

    0
  • #7 01 Lis 2010 18:05
    arnoldziq
    Moderator Programowanie

    mydor napisał:
    tak jak tutaj do liczby pierwszej w tym wypadku jak podałem 2 dodaje tab[i] czyli kolejna liczbę z tablicy czyli 2 no to powinno wyjść 4 a nie 100

    A jak odejmiesz 2 razy 48 to wyjdzie dokładnie 4.
    Proszę poczytać o zamianie cyfry w kodzie ASCII na jej wartość liczbową.

    Zamykam, zanim zaczną tu padać niewybredne epitety.

    0