|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Member
Iscritto dal: Oct 2007
Messaggi: 44
|
[C] Problemi stringa intero
Ciao a tutti,
ho un problema con questo programma: /* Scrivere un programma per la conversione di un numero binario puro * in intero decimale. * Il programma chiede in input una stringa di caratteri */ Il problema è che deve essere data una stringa di caratteri e poi dopo deve essere convertita in un numeri intero da binario a decimale.... Io ho provato a fare questo: Codice:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <math.h>
#define MAX 4
char carat[MAX],c;
int i=0,pos,bin;
main()
{
pos=strlen(carat)-1;
printf("Inserisci una stringa di numeri binari: ");
while((c=getchar()) != '\n')
{
carat[i++]=c;
}
for(i=0;i<strlen(carat);i++)
{
if(carat[i]=='1')
carat[i]=pow(2,pos)*1;
else
carat[i]=0;
pos--;
}
for(i=0;i<strlen(carat);i++)
{
bin=carat[i]+bin;
}
printf("il numero decimale e': %d",bin);
}
ho provato anche a dare una semplice stringa in questo modo senza getchar: Codice:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <math.h>
#define MAX 4
char carat[MAX];
int i,pos,bin;
main()
{
printf("Inserisci una stringa di numeri binari: ");
scanf("%s",carat);
for(i=0;i<strlen(carat);i++)
{
pos=strlen(carat);
if(carat[i]==1)
carat[i]=(2^pos)*1;
else
carat[i]=0;
pos--;
}
for(i=0;i<strlen(carat);i++)
{
bin=carat[i]+bin;
}
printf("il numero decimale e': %d",bin);
}
Cosa devo fare?? Grazie a tutti... |
|
|
|
|
|
#2 |
|
Senior Member
Iscritto dal: Jun 2005
Città: Napoli
Messaggi: 2599
|
io avevo fatto tempo fa un programma simile...te lo mostro:
Codice:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int pow2(int value){
int ris = 1;
int i;
for (i = 1; i <= value; i++) {
ris *= 2;
}
return ris;
}
int main(void)
{
char bin[10]; /*max 10 bit*/
int dec = 0;
int i;
printf("Inserisci il numero binario\n");
scanf("%s", bin);
for (i = 0; i <= strlen(bin) - 1; i++) {
if (bin[i] == '1') {
dec += pow2(strlen(bin) - i - 1);
}
}
printf("il numero in decimale e': %d\n", dec);
return 0;
}
La funzione pow del C l'ho usata poche volte, perchè nn riucivo a capire coe funzionava bene (mah) perciò l'ho riscritta. Dimmi se va bene. Poi perchè usi delle variabili globali?
__________________
Hp pavilion dv6-1250el [cpu: P8700 - ati radeon hd 4650 1 gb - 4 gb ram - hd 320 7200 rpm!] Garmin Official Thread Ultima modifica di gepeppe : 09-06-2008 alle 15:34. |
|
|
|
|
|
#3 | |
|
Member
Iscritto dal: Feb 2006
Messaggi: 134
|
Quote:
Codice:
i = strlen(carat) - 1;
do
{
bin += (carat[i] == '1' ? (int)pow(2, (strlen(carat) - 1 - i)) : 0);
}
while(i--);
|
|
|
|
|
|
|
#4 | |
|
Senior Member
Iscritto dal: Sep 2002
Città: Celano (AQ) Segno_Zodiacale: Leone Ascendente: Cammello Segni_Particolari: Quello
Messaggi: 9571
|
Quote:
|
|
|
|
|
|
|
#5 |
|
Bannato
Iscritto dal: Feb 2005
Città: Roma
Messaggi: 7029
|
niubbi
Codice:
#include <iostream>
#include <string>
using namespace std;
int main()
{
cout << "enter binary number: ";
string strInput;
cin >> strInput;
unsigned int nOutput = 0;
for (unsigned i = 0; i < strInput.length(); i++)
{
nOutput = nOutput * 2;
if (strInput[i] == '1')
{
nOutput++;
}
else if (strInput[i] != '0')
{
cout << "invalid input" << endl;
return 1;
}
}
cout << nOutput;
return 0;
}
|
|
|
|
|
|
#6 |
|
Senior Member
Iscritto dal: Jun 2005
Città: Napoli
Messaggi: 2599
|
già..peccato che lo voleva in C..."non niubbio"
![]() skerzo è!
__________________
Hp pavilion dv6-1250el [cpu: P8700 - ati radeon hd 4650 1 gb - 4 gb ram - hd 320 7200 rpm!] Garmin Official Thread Ultima modifica di gepeppe : 10-06-2008 alle 19:10. |
|
|
|
|
|
#7 |
|
Senior Member
Iscritto dal: May 2004
Città: Londra (Torino)
Messaggi: 3692
|
strtoi dovrebbe essere standard
Codice:
int res=strtoi(stringa,NULL,2); Ma forse al prof. non va bene troppo corto... e usare almeno all'inizio un po' di matematica binaria non puo' che fare bene. In qualsiasi caso eviterei funzioni come pow, esponenti o simili. Meglio l'uso di << e |
__________________
Se pensi che il tuo codice sia troppo complesso da capire senza commenti, e' segno che molto probabilmente il tuo codice e' semplicemente mal scritto. E se pensi di avere bisogno di un nuovo commento, significa che ti manca almeno un test. |
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 14:56.




















