[C] valore di ritorno errato

Messaggioda Matte » 12/04/2017, 19:11

io devo creare un file “main.c”. Devo innanzitutto realizzare in linguaggio C la funzione corrispondente alla seguente
dichiarazione:
Codice:
extern char max_pot10 (unsigned int val);

La funzione riceve un valore intero non negativo val e ritorna l’esponente della massima potenza del dieci contenuta in val. Ad esempio se val=123, 10^0 è contenuto in val, 10^1 è contenuto in val, 10^2 è contenuto in val, 10^3 non è contenuto in val. Quindi la funzione deve ritornare 2 (in altre parole il numero è nell’ordine delle centinaia). Se il numero è 0, la funzione deve ritornare -1. Se ad esempio chiamassimo la funzione inizializzando val a 123456, questa dovrebbe ritornare 5. Però nel mio caso non mi restituisce il valore 5, qualcuno potrebbe riscrivere il pezzo di codice in cui sbaglio?
Codice:
char max_pot10(unsigned int val) {
   if (val == 0) {
      return -1;
   }
   if (val == 1) {
      return 0;
   }
   if (val == 12) {
      return 1;
   }
   if (val == 123) {
      return 2;
   }
   if (val == 1234) {
      return 3;
   }
   if (val == 12345) {
      return 4;
   }
}




int main(void) {
   unsigned int val, z;
   val = 123456;

   z = max_pot10(val);
   return 0;
}
Matte
Junior Member
Junior Member
 
Messaggio: 59 di 238
Iscritto il: 25/01/2017, 18:57

Re: [C] valore di ritorno errato

Messaggioda vict85 » 12/04/2017, 20:12

Direi che la funzione è completamente sbagliata (tranne il controllo sul valore 0). Insomma invece di calcolare qualcosa, fornisci un risultato specifico per alcuni valori specifici. Mi stupisco che il compilatore non ti dia problemi dato che ci sono dei valori di input per cui non fornisci alcun valore di ritorno.

Il professore, o il libro, supponevano che tu risolvessi il problema con un qualche ciclo e ritornassi il massimo valore i per cui val >= 10^i Se il problema sono le potenze, come lo faresti se ti chiedessero di trovare il massimo multiplo di 10 inferiore o uguale a val?

Nota che potresti trovare quel valore anche con un algoritmo logaritmico, ma non vale la pena dato che aumenteresti la complessità del codice e il valore massimo di ritorno è inferiore a 15.
vict85
Moderatore
Moderatore
 
Messaggio: 9055 di 19253
Iscritto il: 16/01/2008, 00:13
Località: Berlin

Re: [C] valore di ritorno errato

Messaggioda Matte » 13/04/2017, 14:23

Ho appena iniziato a studiare questa interessantissima materia, però per adesso sono molto 'impacciato' nel fare gli esercizi perchè mi trovo all'inizio. Infatti come mi hai fatto notare, ora mi accorgo del grande errore che ho fatto..
Ho riprovato a rifare il programma secondo il tuo consiglio(anche se non sono sicuro), però sperando che sia giusto vedo che mi appare l'errore sull'identificatore i non definito e dichiarato che si trova nella riga 8 e 9. Sono andato a riguardarmi il concetto di identificatore sul mio libro, ma sinceramente non riesco a capire che cosa sinceramente dovrei definire e in quale modo. Magari ti mando il codice, cosi capisci meglio
Codice:
#include <stdlib.h>;
#include <stdio.h>;

char max_pot10(unsigned int val) {
   if (val == 0) {
      return -1;
   }
      if (val >= 10 ^ i) {
         return (i-1);
      }
}

int main(void) {
   unsigned int val, i;
   val = 10 ^ 6;
   i = max_pot10(val);
   return 0;
}
Matte
Junior Member
Junior Member
 
Messaggio: 60 di 238
Iscritto il: 25/01/2017, 18:57

Re: [C] valore di ritorno errato

Messaggioda apatriarca » 13/04/2017, 15:22

Il linguaggio C non dispone di un operatore per l'elevamento a potenza, L'operatore ^ ha tutt'altro significato. Inoltre non hai dichiarato la variabile i in max_pot10.
apatriarca
Moderatore
Moderatore
 
Messaggio: 4597 di 10436
Iscritto il: 08/12/2008, 20:37
Località: Madrid


Torna a Informatica

Chi c’è in linea

Visitano il forum: Nessuno e 1 ospite