Visualizzazione dei risultati da 1 a 3 su 3
  1. #1
    Utente di HTML.it
    Registrato dal
    Feb 2011
    Messaggi
    156

    [Pascal o algoritmo in generale] "particolare" programma numeri da deci a binari

    ho visto in internet moltissimi esempi di programmi per trasformare numeri decimali in binari, ma l'output è una variabile di tipo stringa.
    così io ho voluto ideare un algoritmo che dia come output un numero intero:
    codice:
    function binary(num:integer):integer;
    var  i,countmax,numcopy:integer; vettore:array[1..1000] of integer;
    begin
    numcopy:=num; countmax:=0; binary:=0;
       {con il passaggio successivo vedo quante cifre avrà il numero binario}
       repeat begin
       numcopy:=numcopy div 2;
       countmax:=countmax+1;
       end;
       until numcopy=0;
    
    {countmax rappresenta il numero di cifre del numero binario}
    for i:=countmax-1 downto 0 do
    vettore[i]:=num mod 2;
    
    for i:=0 to countmax-1 do
    
    {praticamente qui moltiplico ogni cifra per la potenza di dieci relativa alla sua posizione, come so fosse un numero decimale}
    
    binary:=trunc(binary+exp(ln (10)*i));
    end;
    
    {questo codice viene compilato correttamente, ma ad ora di usarlo il programma si chiude con:
    exit with
    exitcode 217}
    dove sta il problema??

    sapete in caso consigliarmi un algoritmo analogo funzionante?

  2. #2
    Utente di HTML.it
    Registrato dal
    Apr 2011
    Messaggi
    52

    Possibile soluzione

    Una soluzione possibile è la seguente e si basa sul fatto che un numero d di n cifre in base 10 è esprimibile come somma da 1 a n dei prodotti delle varie (i-esime) cifre del numero considerate da destra xi ciascuna moltiplicata per la base b nella quale si vuole calcolare il numero in questo caso 2 elevata alla posizione i del numero componente la cifra che si sta considerando, ossia:

    (d)10=somma i=0 a n-1 (xi*b^i)

    quindi

    codice:
    program conversione(input,output);
    
    var b,n,s,c,i : integer;
    
    begin
         (*lettura di b ed n*)
         write(' valore della base b? ');readln(b);
         writeln;
         write(' numero di cifre del numero? ');readln(n);
         (*controllo di correttezza del valore di b*)
         if(b<2)or(b>9)
         then writeln(' valore scorretto per b')
         else begin
                   (*lettura della prima cifra (la più significativa)*)
                   readln(c);
                   i:=1;s:=c;
                   (*ciclo per la conversione*)
                   while(i<n)and(c>=0)and(c<b)
                   do begin
                   (*lettura i-esima cifra (da sinistra)*)
                            readln(c);
                            s:=s*b+c;
                            i:=i+1;
                      end;
                    writeln;
                    if(c<0)or(c>b-1)
                    then(*l'uscita dal ciclo è dovuta ad errore*)
                         writeln(' cifra scorretta: ',c)
                    else writeln(' numero in decimale: ',s);
               end;
          readln;
    
    end.
    Ciao!!! :ciauz:

  3. #3
    Utente di HTML.it
    Registrato dal
    Feb 2011
    Messaggi
    156
    capisco.....

    posso usare questo, m siccome sto facendo una unit devo dare in input solo il numero.

    in caso il numero di cifre lo posso trovare
    codice:
    ...
    cifre:=length(inttostr(numero));
    e la prima cifra significativa con
    codice:
    ...
    stringa:=inttostr(num);
    numero:=strtoint(stringa[1])
    no?

    anche se forse secondo me verrebbe meglio riversare tutte le cifre in un vettore e poi fare i calcoli, o sbaglio? per la serie:
    codice:
    i:=1;
    while num>0 do
    begin
       
       vettore[i]:=num/10-(num mod 10);  
       num:=num div 10;
       i:=i+1;
    end;

    ah, io avevo fatto un'alternativa al codice di prima, e funziona, ma il numero deve essere minore di 110 altrimenti crasha

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 © 2025 vBulletin Solutions, Inc. All rights reserved.