Visualizzazione dei risultati da 1 a 9 su 9
  1. #1
    Utente di HTML.it
    Registrato dal
    Nov 2009
    Messaggi
    5

    [C++]programma binario-decimale problema

    Ciao a tutti sono nuovo sul forum e mi sono affacciato da poco alla programmazione in C, frequento il 3° superiore di un istituto informatico ora vi posto il codice "C" di un programma che ho creato per la conversione di un numero da binario a decimale. Riscontro problemi nell'utilizzo della funzione strlen, come vi ho detto nn sono esperto, mi potreste spiegare come si usa la funzione citata ?
    Grazie miraccomando con me un linguaggio semplice ed essenziale xd.
    sicuramente troverete altri errori nel programma, sono ben accetti anche consigli per migliorere.
    Non sono neanche sicuro se le variabili p,e vanno dichiarate dove sono.


    int p,e;
    #include<stdio.h>
    #include<conio.h>
    #include<string.h>
    void potenza ();
    void main ()
    {int i=0,d=0,L;
    char b[30];
    L=strlen[b];
    do{e=L-i-1;
    if(b[i]==1){potenza();
    d+=p;
    }
    i++;
    }
    while(i<L-1);
    printf("D=%d",d);
    }
    void potenza ()
    {p=0;
    int i=0;
    if(e>0){do{p*=2;
    i++;
    }
    while(i<e);
    }
    }

  2. #2
    Utente bannato
    Registrato dal
    Feb 2004
    Messaggi
    2,803
    probabilmente dovrei essere l'ultimo a parlare dato che a volte indento il codice in maniera indecente, ma tu mi batti alla grande

    inoltre il codice va scritto nei tag CODE, leggi il regolamento

  3. #3
    Utente di HTML.it
    Registrato dal
    Nov 2009
    Messaggi
    5
    si scusami ma ho fatto un copia incolla veloce e mi so dimenticato di metterlo nei tag code quindi mi scuserete se la lettura non è molto agibile.

  4. #4
    Utente bannato
    Registrato dal
    Feb 2004
    Messaggi
    2,803
    codice:
    #include<stdio.h>
    #include <iostream>
    
    int pow(int value){
    	int ris = 1;
    	if(value >= 1) 
        		for (int i = 1; i <= value; i++) 
            		ris *= 2;	
    	return ris;
    }
    int main () {
    	char bin[10]; // Stringa contenente la sequenza di bit, limitata a 10
    	int dec = 0;
    		printf("Inserisci la sequenza di bit da convertire: ");
    	scanf("%s",bin);
    	for (int i = 0; i <= strlen(bin) - 1; i++)		
    	                     if (bin[i] == '1')dec += pow(strlen(bin) - i - 1);
    	 printf("valore decimale di %s: %d\n",bin,dec);
    	 getchar();getchar();
         return 0;
    }
    dai un'occhiata a questo è abbastanza semplice, per capire meglio prendi carta e penna e scriviti ad ogni istruzione le variabili interessate quanto valgono.
    le prime volte che programmi, e vedi che in un esercizio trovi difficoltà nel capire, fatti uno schema scritto nelle modalità che vuoi (quadratini, cerchi, tabelle), sarà tutto più chiaro

    le var globali di solito si dichiarano dopo le direttive al preprocessore (dopo gli #include), anche se in questo caso non serve per niente usare le var globali, usa gli argomenti alla funzione

  5. #5
    Utente di HTML.it
    Registrato dal
    Nov 2009
    Messaggi
    5
    Purtroppo precedentemente ho premesso che sono alle prime armi e molte delle cose che hai messo nel programma non ci capisco niente, quindi preferire che mi spiegasse dove sbaglio.
    La logica del programma è giusta sbaglio solo nella traduzione qualcosa.
    GRAZIE

  6. #6
    Utente di HTML.it
    Registrato dal
    Nov 2009
    Messaggi
    5
    mi sono reso conto che non potete capire se non vi spiego un po' il significato delle varie variabili.

    b: è il numero binario che diamo in input;
    i: è il contatore che inizializzo =0;
    L: sono le cifre binarie da cui è composta la stringa;
    d. il decimale
    e: esponete a cui dobbiamo elevare il 2, ho trovato l'algoritmo e=l-i-1 che ci permette di individuare l'esponete cioè la posizione

    se si rende necssario vi metto anche un piccolo flow-chart fatto su word.

  7. #7
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,465
    Non ho dato un'occhiata approfondita ma ho visto che usi la funzione

    strlen

    senza avere inizializzato in alcun modo la stringa b

    Dato che il contenuto di una variabile non inizializzata in C è casuale, altrettanto sarà per il valore restituito dalla strlen.
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  8. #8
    Utente di HTML.it
    Registrato dal
    Nov 2009
    Messaggi
    5
    ok grazie lo inizializzata facendo gets(b), ma mi da sempre gli stessi errori di prima borland C
    -Cannot convert 'char *' to 'int';
    -cannot convert 'unsigned int (*)(const char *)' to 'char;

    codice:
    int p,e;
    #include<stdio.h>
    #include<conio.h>
    #include<string.h>
    void potenza ();
    void main ()
    {int i=0,d=0,L;
     char b[30];
     printf("b=");gets(b);
     L=strlen[b];
     do{e=L-i-1;
        if(b[i]==1){potenza();
    		d+=p;
    	       }
        i++;
       }
     while(i<L-1);
     printf("D=%d",d);
    }
    void potenza ()
    {p=0;
     int i=0;
     if(e>0){do{p*=2;
    	    i++;
    	   }
    	 while(i<e);
    	}
    }

  9. #9
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,465
    Per passare i parametri alle funzioni si usano le parentesi tonde non quelle quadre.

    Quindi non

    L=strlen[b];

    ma

    L=strlen(b);

    Ti consiglio di indentare meglio il codice perche' cosi' non si può leggere ... dovrebbe essere

    codice:
    #include <stdio.h>
    #include <conio.h>
    #include <string.h>
    
    void potenza ();
    
    int p,e;
    
    int main ()
    {
    	int i=0,d=0,L;
    	char b[30];
    
    	printf("b=");
    	gets(b);
    	
    	L=strlen[b];
    	
    	do
    	{
    		e=L-i-1;
    		if(b[i]==1)
    		{
    			potenza();
    			d+=p;
    		}
    	
    		i++;
    	}
    	while(i<L-1);
    
    	printf("D=%d",d);
    
    	return 0;
    }
    
    void potenza()
    {
    	p=0;
    	int i=0;
    
    	if(e>0)
    	{
    		do
    		{
    			p*=2;
    			i++;
    		}
    		while(i<e);
    	}
    }
    Inoltre ti consiglio di far restituire un intero al main e di non usare variabili globali (fai in modo che la funzione potenza restituisca il valore che vuoi).
    No MP tecnici (non rispondo nemmeno!), usa il forum.

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.