Page 1 of 1

problema eliminare cifra de mijloc

Posted: 26 Jun 2013, 09:30
by stelian_2681
La urmatoare problema nu inteleg ce se intampla in linia 28.
Enuntul problemei:

Se citeste un numar strict mai mare decat 9 avand numar impar de cifre.
Sa se afiseze numarul obtinut prin eliminarea cifrei de mijloc a numarului initial.

Eroarea apare in linia 28 : x=pow(10,cnt);
unde cnt este 2 si x ar trebui sa fie 100, numai ca la o rulare a codului cu debugger-ul x=99.
Nu inteleg unde gresesc.
Astept sugestii.

Code: Select all

 1  #include <iostream>
 2  #include <math.h>
 3  using namespace std;
 4  
 5  int main()
 6  {
 7      int nr, rest, cnt=0, m, var1, var2, x, y, z, q;
 8      label:
 9          cout<<"\n Introduceti nr = ";
10          cin>>nr;
11      m=nr;
12      if(nr>9)
13      {
14          while(nr!=0)
15              {
16                  rest=nr%10;
17                  cnt++;
18                  nr=nr/10;
19              }
20      }
21      else
22          goto label;
23      if(cnt%2!=0)
24      {
25          cnt=cnt/2;
26          z=pow(10,(cnt+1));
27          var1=m/z;
28          x=pow(10,cnt);
29          var2=m%x;
30          y=var1*x+var2;
31          cout<<"\n "<<y<<endl;
32      }
33      if(cnt%2==0)
34          cout<<"\n Numarul cifrelor este par "<<endl;
35      return 0;
36  }

Re: problema eliminare cifra de mijloc

Posted: 26 Jun 2013, 14:30
by Marius Bancila
pow(10,2) returneaza un double. Reprezentarea in virgula flotanta nu e una exacta, ci aproximativa si poate fi 99.9999998 sau ceva degenul. Cand convertesti inapoi la intreg, se pierde partea de dupa virgula si ramai doar cu 99.

Pentru mai multe informatii despre asta vezi http://stackoverflow.com/questions/9704 ... 9-999-in-c.