•miculprogramator
|
|
« : 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
|
|
|
Memorat
|
|
|
|
•sigrid
|
|
« 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
|
|
« Răspunde #2 : Martie 21, 2009, 17:32:08 » |
|
am incercat asa: #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
|
|
« 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 !!!
|
|
|
Memorat
|
|
|
|
•miculprogramator
|
|
« Răspunde #4 : Martie 21, 2009, 17:47:02 » |
|
acum am incercat sa fac debug si tot nu-mi dau seama, am modificat asa: 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?
|
|
|
Memorat
|
|
|
|
•gabor_oliviu1991
|
|
« 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
|
|
|
Memorat
|
|
|
|
•miculprogramator
|
|
« 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
|
|
« Răspunde #7 : Martie 21, 2009, 18:03:21 » |
|
..... #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: { pow=1; for(x=1;x<=n-i;x++) pow*=2; } si la sfarsit faci s+=v[ i ]*pow;
|
|
|
Memorat
|
|
|
|
•miculprogramator
|
|
« 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
|
|
« 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
|
|
« 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
|
|
« Răspunde #11 : Martie 21, 2009, 18:31:48 » |
|
nu prcep cum vine asta, dar m-am gansit asa: #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
|
|
« Răspunde #12 : Martie 21, 2009, 18:42:01 » |
|
#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: Numarul de cifre a lui n in baza 2 v[ 1 ],v[ 2 ]... v[ n ] (cu spatii intre ele)
|
|
|
Memorat
|
|
|
|
•alexandru92
|
|
« Răspunde #13 : Martie 21, 2009, 19:14:44 » |
|
daca vrei poti citit pe wikipedia cum convertesti din binar->zecimal. //.... 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 //.... 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
|
|
« 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 Sper ca am inteles ce ceri. Uite aici un cod foarte scurt, si zic eu, foarte rapid. Sper sa iti ajute. #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
|
|
« Răspunde #15 : Martie 21, 2009, 21:36:43 » |
|
acum am inteles mai bine! multumesc tuturor mi-ati fost de mare ajutor
|
|
|
Memorat
|
|
|
|
|