Blocco a runtime inatteso

di il
13 risposte

Blocco a runtime inatteso

Salve a tutti sono uno studente ancora non esperto di programmazione volevo chiedermi quando faccio partire il mio programma non mi da nessun errore però quando uso l'interfaccia dell'utente e inizio ha mettere i dati dopo i primi due dati mi smette di funzionare e non so il motivo se qualcuno gentilmente può darmi una mano

#include <stdlib.h>
#include <stdio.h>
#include <iostream>

int main(int argc, char*argv[]) /*main principale versione dev  */
 {
 	int Rx_vett[5];// inizializzazione variabile vettoriale
 	int indice;
 	int Rp=0;
	int Rs=0;
 	int somma=0;
 	int Rp1;
 	int Rp5;
   printf("\n Stiamo caricando il vettore devi inserire 5 numeri positivi \n");
   //richiesta per l'utente
    for(indice=0; indice<5; indice=indice +1)//inizio for 
    { 
                  printf("\n inserisci l'intero nella componente %d del vettore  ",indice);
                  
                  scanf("%d",& Rx_vett[indice]);
                  
                  printf("\n il valore della componente %d e' %d \n ", indice,Rx_vett[indice]);
                  somma = somma+Rx_vett[indice];
                 
				 Rp1 = 1/Rx_vett[indice];
                 
				  Rp5=1/Rp1;
                  Rp=Rp+Rp5;
                  
                   }//fine for 
                         
                       printf("\n il valore della resistenza in seire vale %d \n ", somma);     
                        printf("\n il valore della resistenza in parallelo vale %d \n ", Rp);
	system("PAUSE");
	return 0;

13 Risposte

  • Re: Blocco a runtime inatteso

    Innanzitutto facciamo un pò di chiarezza...stai facendo confusione tra le librerie. iostream è una libreria usata in c++, quindi qui non c 'entra nulla. La variabile Rs non è utilizzata, non è grave ma è comunque uno spreco che puoi evitare, visto che l'hai rimpiazzata con somma. Veniamo al dunque. Nel codice fai delle divisioni,giusto? Ti sei chiesto cosa succederebbe se una delle tue componenti inserite fosse uguale a 0 ?
    Il risultato di una divisione tra interi è SEMPRE un intero ? Inoltre, dai una controllata al calcolo della resistenza in parallelo.
  • Re: Blocco a runtime inatteso

    Ah, dimenticavo. I programmi non smettono mai di funzionare a caso!
  • Re: Blocco a runtime inatteso

    E proprio il calcolo del parallelo che mi fa mandare in tilt il programma
  • Re: Blocco a runtime inatteso

    Prova a rispondere alle mie domande di sopra!
  • Re: Blocco a runtime inatteso

    Si sono tutte intere nel codice faccio delle divisioni
  • Re: Blocco a runtime inatteso

    Allora prendi una calcolatrice, digita un qualsiasi numero e poi dividilo per 0. Poi digita queste due operazioni : 6 / 49 , 7 / 3 . Ti dice nulla tutto ciò ?
  • Re: Blocco a runtime inatteso

    Un numero diviso per 0 e impossibile mentre i 2 calcoli sono dei float
  • Re: Blocco a runtime inatteso

    Esatto! Quindi devi prevedere un controllo affinchè non avvenga una divisione per 0. In più ,devi modificare i tipi delle variabili da int a float, in modo tale da garantire correttezza nei calcoli. Cosi com 'è il risultato delle divisioni perde la mantissa. Nel calcolo del reciproco il programma crasha.
  • Re: Blocco a runtime inatteso

    Grazie mille
  • Re: Blocco a runtime inatteso

    Ma devo cambiare in float anche indice e il vettore e la somma ho basta che cambi solo il Rp,Rp1,Rp5?
  • Re: Blocco a runtime inatteso

    L' indice sarà sempre e solo intero. Cosa vuol dire scrivere nella 0,5 cella del mio vettore?
    Comunque hai due possibilità: O trasformi il vettore in float ( io utilizzerei i double poichè sono a doppia precisione ) e di conseguenza anche la somma insieme ai tuoi Rp1........ oppure lasci intero sia il vettore che la variabile somma, ma sei costretto a castare esplicitamente i valori del vettore in float o double prima dell assegnamento ad Rp ( come nell'esempio )
    
    
    Rp1 += (1/(float) Rx_vett[indice]);
    
    
    Credo sia più pulito il primo modo.
  • Re: Blocco a runtime inatteso

    Quando li metto in double quando vado per mettere i dati nell'interfaccia metto il primo con la virgola pero non me lo legge e li mette lui da solo
  • Re: Blocco a runtime inatteso

    Controlla il parametro della scanf , non è più il % d.
    sostituiscilo con % f. Se vuoi limitare le cifre dopo la virgola scrvi % 2.2f dovrebbe andar bene
Devi accedere o registrarti per scrivere nel forum
13 risposte