Pagini: [1]   În jos
  Imprimă  
Ajutor Subiect: din binar in zecimal  (Citit de 10039 ori)
0 Utilizatori şi 1 Vizitator pe acest subiect.
miculprogramator
Nu mai tace
*****

Karma: 65
Deconectat Deconectat

Mesaje: 306



Vezi Profilul
« : Martie 21, 2009, 16:59:50 »

Ma poate ajuta cineva sa transform un numar binar in nr zecimal. Trebuie sa fac asta doar cu vectori, fara functii...N-am nici o idee Think
Memorat
sigrid
De-al casei
***

Karma: 61
Deconectat Deconectat

Mesaje: 129



Vezi Profilul
« Răspunde #1 : Martie 21, 2009, 17:15:51 »

Transformarea unui numar din binar in zecimal se face ca la mate. Daca ai un vector v cu N elemente reprezentand cifrele binare, numarul zecimal il obtii cu un for prin v calculand intr-o suma toti termenii v[ i ] * 2 N - i .
Memorat
miculprogramator
Nu mai tace
*****

Karma: 65
Deconectat Deconectat

Mesaje: 306



Vezi Profilul
« Răspunde #2 : Martie 21, 2009, 17:32:08 »

am incercat asa:
Cod:
#include <iostream.h>
main()
{
int v[100],n,i,s=0;
cout<<"n=";cin>>n;
for (i=0;i<n;i++)
{
cout<<"v["<<i+1<<"]=";cin>>v[i];
}
for (i=0;i<n;i++)
s=v[i]*(2*n-i);
cout<<"nr zecimal este: "<<s;

eu introduc n=6 100000 (trebuie sa dea 32)
si afiseaza 0. unde gresesc?>


« Ultima modificare: Martie 21, 2009, 17:37:28 de către miculprogramator » Memorat
gabitzish1
Moderatori infoarena
Nu mai tace
*****

Karma: 321
Deconectat Deconectat

Mesaje: 926



Vezi Profilul
« Răspunde #3 : Martie 21, 2009, 17:39:18 »

Trebuie sa inmultesti v[ i ] cu 2^(n - i), nu cu 2 * n - i.
Si mai e o gresala fundamentala, scrie s += [...] ,  nu s = [...] , pentru ca asa retii doar ultima valoare care ar trebui adunata.

Poate o sa zici ca's enervant ca'ti tot repet : Fa debug singur, ca gresesti chestii pe care e imposibil sa nu le vezi !!!   Shame on you
Memorat
miculprogramator
Nu mai tace
*****

Karma: 65
Deconectat Deconectat

Mesaje: 306



Vezi Profilul
« Răspunde #4 : Martie 21, 2009, 17:47:02 »

acum am incercat sa fac debug si tot nu-mi dau seama, am modificat asa:

Cod:
s+=v[i]*(2*(2*(n-i)));

si nu-mi dau seama daca introduc bine nr, adica daca eu trebuie sa pun
100000
sau 000001 ca sa afiseze 32.normal e varianta 100000, dar cum gandeste calculatorul? sad
Memorat
gabor_oliviu1991
Nu mai tace
*****

Karma: 28
Deconectat Deconectat

Mesaje: 200



Vezi Profilul
« Răspunde #5 : Martie 21, 2009, 17:48:21 »

tu trebuie sa ridici pe 2 la puterea n-i... pune asa s+=v[ i ]*pow(2,n-i); si ar cam trebui sa iasa Smile
Memorat
miculprogramator
Nu mai tace
*****

Karma: 65
Deconectat Deconectat

Mesaje: 306



Vezi Profilul
« Răspunde #6 : Martie 21, 2009, 17:54:41 »

"Function pow should have a prototype". Si nu am voie cu functii, n-am invatat inca.
Memorat
c_e_manu
Nu mai tace
*****

Karma: 56
Deconectat Deconectat

Mesaje: 243



Vezi Profilul
« Răspunde #7 : Martie 21, 2009, 18:03:21 »

Cod:
.....
#include<math.h>

void main()
{
....
s+=v[i]*pow(2,n-i);
....
}

E o functie din biblioteca math. Altfel poti ridica la putere singur cu un for:

Cod:
{
pow=1;
for(x=1;x<=n-i;x++) pow*=2;
}

si la sfarsit faci s+=v[ i ]*pow;
Memorat
miculprogramator
Nu mai tace
*****

Karma: 65
Deconectat Deconectat

Mesaje: 306



Vezi Profilul
« Răspunde #8 : Martie 21, 2009, 18:07:24 »

nu imi afiseaza ce trebuie. de ce nu e bine cum am incercat sa ridic eu la putere? ca eu nu vreau cu functia pow
Memorat
c_e_manu
Nu mai tace
*****

Karma: 56
Deconectat Deconectat

Mesaje: 243



Vezi Profilul
« Răspunde #9 : Martie 21, 2009, 18:09:09 »

Fiindca a ridica la puterea p inseamna sa faci nr*nr*...*nr , de p ori.
Memorat
gabitzish1
Moderatori infoarena
Nu mai tace
*****

Karma: 321
Deconectat Deconectat

Mesaje: 926



Vezi Profilul
« Răspunde #10 : Martie 21, 2009, 18:10:55 »

Nu e bine pentru ca tu in loc sa ridici la putere, faci 4 * (n - i) ... ceea ce nu e egal cu 2 ^ (n - i);
Uite o alta metoda: iti iei un vector p2; p2[0] = 1 si construiesti p2[ i ] = p2[i - 1] * 2; asa vei avea p2[ x ] = 2 ^ x;
Ca sa gasesti 2 ^ (n - i) apelezi p2[n - i].
« Ultima modificare: Martie 21, 2009, 18:46:07 de către Gabriel Bitis » Memorat
miculprogramator
Nu mai tace
*****

Karma: 65
Deconectat Deconectat

Mesaje: 306



Vezi Profilul
« Răspunde #11 : Martie 21, 2009, 18:31:48 »

nu prcep cum vine asta, dar m-am gansit asa:

Cod:
#include <iostream.h>
main()
{
int v[100],j,k,p=1,n,x=0;
cout<<"n=";cin>>n;
for (k=0;k<n;k++)
{
cout<<"v["<<k+1<<"]=";cin>>v[k];
}
for (k=0;k<n-1;k++)
for (j=0;j<k;j++)
p=p*2;
x=x+v[k]*p;
}
cout<<"nr zec=" <<x;
}

ce parere aveti?
Memorat
gabor_oliviu1991
Nu mai tace
*****

Karma: 28
Deconectat Deconectat

Mesaje: 200



Vezi Profilul
« Răspunde #12 : Martie 21, 2009, 18:42:01 »

Cod:
#include<fstream.h>
#include<math.h>

int main()
{
          ifstream f("data.in");
          ofstream g("data.out");
         
          int n, i,j,power,s=0, v[100];
         
          f>>n;
          for(i = 1; i <=n; i++)
                f>>v[i];
         
          for(i = 1; i <= n; i++)
                s+=v[i]*pow(2,n-i);
          g<<s;
         return 0;
}       

Uite asa merge. Fisierul de intrare trebuie sa arate asa:

Cod:
Numarul de cifre a lui n in baza 2
v[ 1 ],v[ 2 ]... v[ n ] (cu spatii intre ele)
Memorat
alexandru92
Nu mai tace
*****

Karma: -191
Deconectat Deconectat

Mesaje: 496



Vezi Profilul
« Răspunde #13 : Martie 21, 2009, 19:14:44 »

daca vrei poti citit pe wikipedia cum convertesti din binar->zecimal.
Cod:
//....
for(i=0;i<n;++i)
   if(v[i])   
     {for(p=1,j=1;j<=n-i-1;++j) p*=2;
       s+=p;
      }
cout<<s<<endl;
Sau daca folosesti metoda lui  @Gabriel Bitis
Cod:
//....
for(p[0]=1,i=1;i<=n;++i) p[i]=p[i-1]*2; //construiesti vectorul  p cu toate puterile lui 2 ,adica 2,4,8,.....
for(i=0;i<n;++i)
   s+=v[i]*p[n-i-1];  //si acum pur si simplu adun :D
cout<<s;
Memorat
toni2007
Nu mai tace
*****

Karma: 160
Deconectat Deconectat

Mesaje: 663



Vezi Profilul
« Răspunde #14 : Martie 21, 2009, 19:34:55 »

Ma poate ajuta cineva sa transform un numar binar in nr zecimal. Trebuie sa fac asta doar cu vectori, fara functii...N-am nici o idee Think

Sper ca am inteles ce ceri. Uite aici un cod foarte scurt, si zic eu, foarte rapid. Sper sa iti ajute.

Cod:
#include <iostream>
#include <string.h>
using namespace std;

int main () {
char s[32], N;
unsigned int Sol = 0, i;

gets(s); N = strlen(s);

for (i = 0; i < N; ++ i)
Sol |= (s[i] == 49) ? ( 1 << (N - i - 1)) : 0;

cout << Sol << "\n";
}
Memorat
miculprogramator
Nu mai tace
*****

Karma: 65
Deconectat Deconectat

Mesaje: 306



Vezi Profilul
« Răspunde #15 : Martie 21, 2009, 21:36:43 »

acum am inteles mai bine! multumesc  tuturor Smile mi-ati fost de mare ajutor Thumb up
Memorat
Pagini: [1]   În sus
  Imprimă  
 
Schimbă forumul:  

Powered by SMF 1.1.19 | SMF © 2006-2013, Simple Machines