Jump to content

SUBIECTE NOI
« 1 / 5 »
RSS
O mostenire cu (o mica )problema

touchscreen navigatie stricat

bonsai - de unde?

Resetare Bonus Malus
 Unitatea optica DVD-rw absenta pe...

Problema configurare Wireguard

Dozatoare de apa, cu alimentare d...

Intarziere aterizare avioane
 Accident masina reparata pe CASCO

Probleme Ginseng Microcarpa

Un sunet pronuntat la BMW e90 318i

Caut sugestii pentru achizitionar...
 Acest LNB......

Salarii compensatorii?

Recomandare service in Slatina pe...

De unde cumparati piese de schimb...
 

Conversie de baze in C++

- - - - -
  • Please log in to reply
21 replies to this topic

#1
raiksaa

raiksaa

    New Member

  • Grup: Members
  • Posts: 4
  • Înscris: 09.10.2010
Buna ziua.

Am urmatoarea problema:

Se citeste o succesiune de cifre de 1 si 0, prima fiind 1.Aceasta succesiune are semnificatia unui numar in baza 2.Sa se afiseze acest numar in baza 10.

Este prima data cand lucrez cu baze, si nu inteleg foarte bine algoritmul de conversie.

Daca poate cineva sa imi explice aproximativ implementarea sau algoritmul, as fi foarte recunoscator.

Multumesc anticipat.

Later edit:

Cam asta ar fi ce am incercat eu pana acum:

#include<iostream.h>

void main () {

long int baza2,n,nr,i;
nr=0;
i=0;

cout<<"baza2=";cin>>baza2;

while(baza2>=0){

n=baza2%10;
i++;
baza2=baza2/10;
nr=nr+n*2^i;}

cout<<"nr="<<nr;

}

EDIT 2: Nu stiu ce cautau stdio si math acolo >_< .

EDIT 3: In while era baza2, nu x. Iertare dar am 6 ore de programare pe ziua de azi, nu mai vad bine.

Edited by raiksaa, 09 October 2010 - 13:55.


#2
MarianG

MarianG

    be that as it may

  • Grup: Moderators
  • Posts: 31,477
  • Înscris: 10.08.2005
L.E.

#include <conio.h>
#include <stdio.h>
#include <math.h>



........

	while(nr)
	{
		if((nr%10==0)||(nr%10==1)) // security check -- in cazul in care utilizatorul greseste formatul numerelor tastate -- ex 1201 --
			n+= (nr%10) * pow(2,aux++);
		nr/=10;
	}
}
se poate adapta usor pentru orice baza.

2^i nu este ridicare la putere, ci XOR

Edited by MarianG, 09 October 2010 - 14:38.


#3
bluething

bluething

    Member

  • Grup: Members
  • Posts: 611
  • Înscris: 14.09.2010
baza 2 citita fiind ce?

#4
Yoda2009

Yoda2009

    Senior Member

  • Grup: Senior Members
  • Posts: 2,743
  • Înscris: 30.08.2009
Presupunand ca s-au citit n cifre (numarul in baza 2) intr-o matrice b2[n], numarul in baza 10 (b10) va fi cam asa:

i=0; b10=0;
while(i<n)
{
b10+= b2[i]*2^i;
i++;
{

(cu mentiunea ca nu-mi asum nici o raspundere  :) ... si ca nr e pozitiv,  ca altfel mi se pare ca ultimul bit, din sanga, e de semn, din ce-mi amintesc)

0         1          1          0          1         1         (numarul 27)

2^5  + 2^4  +  2^3  +  2^2  + 2^1 +  2^0      (- se aduna astea)



(Vad ca pe Wiki dau si cum e cu numere in baza 2 cu virgula, asta n-o stiam pana acum.)

! am pus ^ ca fiind ridicare la putere, dar nu e, scuze de greseala. Cred ca trebuie pow() in loc...

Edited by Yoda2009, 09 October 2010 - 15:07.


#5
bluething

bluething

    Member

  • Grup: Members
  • Posts: 611
  • Înscris: 14.09.2010

 Yoda2009, on 9th October 2010, 15:54, said:

Presupunand ca s-au citit n cifre (numarul in baza 2) intr-o matrice b2[n], numarul in baza 10 (b10) va fi cam asa:

i=0; b10=0;
while(i<n)
{
b10+= b2[i]*2^i;
i++;
{

(cu mentiunea ca nu-mi asum nici o raspundere  :) ... si ca nr e pozitiv,  ca altfel mi se pare ca ultimul bit, din sanga, e de semn, din ce-mi amintesc)

  0         1          1          0          1         1         (27)

2^5     2^4      2^3      2^2      2^1      2^0      - se aduna astea



(Vad ca pe Wiki dau si cum e cu numere in baza 2 cu virgula, asta n-o stiam pana acum.)

poate vector...nu matrice...ca aia e bidimensionala...aici e unidimensionala

#6
MarianG

MarianG

    be that as it may

  • Grup: Moderators
  • Posts: 31,477
  • Înscris: 10.08.2005

 bluething, on 9th October 2010, 15:43, said:

baza 2 citita fiind ce?
conform pseudocodului, nr

pentru numere negative, se face complement fata de 2.

Edited by MarianG, 09 October 2010 - 15:05.


#7
bluething

bluething

    Member

  • Grup: Members
  • Posts: 611
  • Înscris: 14.09.2010

 MarianG, on 9th October 2010, 16:04, said:

conform pseudocodului, nr
la naiba si eu care credeam ca era un cuvant...
ma refeream la insemnatatea lui in exercitiu

#8
MarianG

MarianG

    be that as it may

  • Grup: Moderators
  • Posts: 31,477
  • Înscris: 10.08.2005
vorbesti romaneste sau codat, cand spui cuvant te referi la STRING sau la WORD?

#9
bluething

bluething

    Member

  • Grup: Members
  • Posts: 611
  • Înscris: 14.09.2010

 MarianG, on 9th October 2010, 16:10, said:

vorbesti romaneste sau codat, cand spui cuvant te referi la STRING sau la WORD?

ce word omule?
e evident ca o cifra trebuie introdusa, ca daca era un cuvant trebuia pusa biblioteca #include<string.h>
wtf...

#10
MarianG

MarianG

    be that as it may

  • Grup: Moderators
  • Posts: 31,477
  • Înscris: 10.08.2005
ce lungime (pe bit) are un numar?

#11
bluething

bluething

    Member

  • Grup: Members
  • Posts: 611
  • Înscris: 14.09.2010

 MarianG, on 9th October 2010, 16:14, said:

ce lungime (pe bit) are un numar?
ce relevanta are intrebarea asta pt problema de mai sus?

anyway, dupa cum ai scris tu programul ala, rezultatul ar trebui sa fie nr initial scris invers
o sa incerc sa il fac diseara daca mai poti astepta nitel :D

Edited by bluething, 09 October 2010 - 15:32.


#12
MarianG

MarianG

    be that as it may

  • Grup: Moderators
  • Posts: 31,477
  • Înscris: 10.08.2005

 bluething, on 9th October 2010, 16:19, said:

ce relevanta are intrebarea asta pt problema de mai sus?
http://en.wikipedia....mputer_science) :death:

#include <conio.h>
#include <stdio.h>
#include <math.h>

void main(void){

	int x,b;
	float nr=0;
	printf("Lungimea Codului=");scanf("%d",&x);

	while(x)
	{
		b= getche()-48;
		if( (b==0) || (b==1))
			nr+= b * pow(2,--x);  else
			putch(8);
	}
	printf("\n%f",nr);
	getch();
}


#13
bluething

bluething

    Member

  • Grup: Members
  • Posts: 611
  • Înscris: 14.09.2010
asta e in pascal, fata vrea in C++ din cate vad

#14
MarianG

MarianG

    be that as it may

  • Grup: Moderators
  • Posts: 31,477
  • Înscris: 10.08.2005
ca o fi greu sa-si schimbe, instructiunile pentru citere, si afisare

#15
bluething

bluething

    Member

  • Grup: Members
  • Posts: 611
  • Înscris: 14.09.2010

 MarianG, on 9th October 2010, 16:49, said:

ca o fi greu sa-si schimbe, instructiunile pentru citere, si afisare
e greu ca o derutezi, daca tot zici ca stii, faci tu conversia de la pascal la C :P
nu o pui pe ea sa schimbe...

#16
MarianG

MarianG

    be that as it may

  • Grup: Moderators
  • Posts: 31,477
  • Înscris: 10.08.2005

 bluething, on 9th October 2010, 16:19, said:

anyway, dupa cum ai scris tu programul ala, rezultatul ar trebui sa fie nr initial scris invers
	while(nr)
	{
		if((nr%10==0)||(nr%10==1)) // security check -- in cazul in care utilizatorul greseste formatul numerelor tastate -- ex 1201 --
			n+= (nr%10) * pow(2,aux++);
		nr/=10;
	}
tu ai inteles ce face

nr%10
nr/=10
nr%10 - citeste ultima cifra
nr/=10 - sterge ultima cifra din numarul actual
aux++ creste puterea cu trecerea fiecarui numar valabil.

cum ai ajuns la concluzia ca trebuie sa afisez invers?

#17
secretalex92

secretalex92

    Active Member

  • Grup: Members
  • Posts: 1,496
  • Înscris: 28.12.2008

 bluething, on 9th October 2010, 16:55, said:

e greu ca o derutezi, daca tot zici ca stii, faci tu conversia de la pascal la C :P
nu o pui pe ea sa schimbe...
Tu unde vezi cod in pascal ? Eu vad numai cod scris in C.

#18
yonut_a

yonut_a

    Trala la la la

  • Grup: Senior Members
  • Posts: 3,948
  • Înscris: 03.08.2008
@bluething mai mult derutezi oamenii decat sa ii ajuti la rezolvarea problemei.

Quote

e evident ca o cifra trebuie introdusa, ca daca era un cuvant trebuia pusa biblioteca #include<string.h>

Daca era un cuvant baza2 trebuia declarat de tip string. Din ce ai spus tu rezulta ca daca incluzi <string.h> automat citesti stringuri

Quote

anyway, dupa cum ai scris tu programul ala, rezultatul ar trebui sa fie nr initial scris invers

Codul lui Marian e perfect corect, nu returneaza niciun numar invers.

Quote

asta e in pascal

?? eu nu vad pascal pe topicul asta.Presupun ca te refereai la C ca daca nu iti dai seama care e cod C si care e cod Pascal nu inteleg de ce dai sfaturi pe aria de programare.


Ontopic:

@raiksaa

Codul tau era corect cu doua observatii. Trebuie sa incrementezi i dupa ce il folosesti, iar in c++ pentru ridicarea la putere se foloseste functia POW

Edited by yonut_a, 09 October 2010 - 18:29.


Anunturi

Second Opinion Second Opinion

Folosind serviciul second opinion ne puteți trimite RMN-uri, CT -uri, angiografii, fișiere .pdf, documente medicale.

Astfel vă vom putea da o opinie neurochirurgicală, fără ca aceasta să poată înlocui un consult de specialitate. Răspunsurile vor fi date prin e-mail în cel mai scurt timp posibil (de obicei în mai putin de 24 de ore, dar nu mai mult de 48 de ore). Second opinion – Neurohope este un serviciu gratuit.

www.neurohope.ro

0 user(s) are reading this topic

0 members, 0 guests, 0 anonymous users

Forumul Softpedia foloseste "cookies" pentru a imbunatati experienta utilizatorilor Accept
Pentru detalii si optiuni legate de cookies si datele personale, consultati Politica de utilizare cookies si Politica de confidentialitate