Sequenza terminata da negativo

di Anonimizzato12629 il
12 risposte
..risultato compilazione .. ..sballataaa..perché..ecco il testo e mia soluzione
/*Scrivere un programma C che:
· Legga da tastiera una sequenza (di lunghezza non nota a priori) di numeri positivi. La sequenza termina quando viene inserito un numero negativo
ESEMPIO:
Data la sequenza di numeri: 1 5 7 9 3 12 3 0 -1
*/
include<stdio.h>

int main(){
int i,dim;
float num;    
float seq[dim];  
printf("Inserisci la sequenza di numeri terminata da un numero negativo\n");    
while(num>=0){
 scanf("%d",&num); 
      seq[i]=num;
       i++;                    
             }       
printf("Stampo la sequenza inserita :\n");
 for(i=0;i<dim;i++)
     printf("%d",seq[i]);            
                   
return 0;      
             }

12 Risposte

  • 1) dim non ha alcun valore ... come allochi il vettore se non sai quanto vale dim?

    2) num non ha alcun valore all'inizio ... come lo confronti nella while ?

    3) il controllo del valore negativo va fatto diversamente (accetti il valore e lo assegni senza controllarlo ...)

    4) la for lavora fino a dim che non ha un valore assegnato ...
  • Infatti..la questione della Dim..la pensavo anche io cosi..ma come faccio a inizializzare il vettore senza dare una dim predefinita?
  • Non puoi ...

    Se lavori con C++ puoi usare una list ...

    Se usi il C e pensi che un valore (ad esempio) di 1000 elementi possa essere un buon limite, utilizza 1000 come valore per allocare il vettore; altrimenti dovrai allocare/riallocare memoria dinamicamente.

    Ma nell'esercizio ti viene espressamente indicato di conservare i valori in un vettore? Oppure puoi anche non conservare i valori?
  • Allora l'esercizio..ultimata la sequenza ,mi chiede di fare la somma dei numeri nella posizione i e i+1..cioè i successivi ...
  • Quindi li devi memorizzare da qualche parte ...
  • Fatto!! ci sono possibili miglioramenti?
    #include<stdio.h>
    #define dim 10
    int main(){
    int num=0;
    int seq[dim];
    printf("Inserisci la sequenza di numeri terminata da un numero negativo\n");    
    
    int i=0;
    while(num!=-1){
                 scanf("%d",&num);  
        seq[i]=num;
        i++;          
                  }
    
                      
    printf("Stampo la sequenza inserita :\n");
     for(i=0;i<seq[i];i++)
         printf("%d",seq[i]);            
                      
    return 0;      
                 }
    
             
    
  • A parte che 10 mi sembra pochino, la for è sbagliata ... l'hai compilato e provato?
  • Allora..si compila e da il risultato desiderato. Effettivamente dim meglio 100..cmq fatto anche esercizio completo..compila e da risultato..ma forse un po' troppo lungo...
    Un metodo per accorciarlo??
    /*Scrivere un programma C che:
    · Legga da tastiera una sequenza (di lunghezza non nota a priori) di numeri positivi e calcoli il
    massimo della somma di ogni numero inserito e del suo precedente (cioè il massimo tra: il
    primo + il secondo, il secondo + il terzo, il terzo + il quarto,…). La sequenza termina
    quando viene inserito un numero negativo
    · Per determinare il massimo fra due numeri si implementi la funzione
    int max (int n1, int n2) che restituisce il massimo fra n1 e n2
    · Il programma deve visualizzare il valore massimo calcolato
    ESEMPIO:
    Data la sequenza di numeri: 1 5 7 9 3 12 3 0 -1
    Il programma deve produrre un output del tipo: il massimo è 16
    */
    int max(int n1, int n2);
    
    #include<stdio.h>
    #define dim 100
    int main(){
    int num=0;
    int seq[dim];
    int somma[dim];
    int ris[dim];
    int massimo;
    printf("Inserisci la sequenza di numeri terminata da un numero negativo\n");    
    int i=0;
    while(num!=-1){
    scanf("%d",&num);  
    seq[i]=num;
    i++;          
                  }
    printf("Stampo la sequenza inserita :\n");
     for(i=0;i<seq[i];i++){
         printf(" %d ",seq[i]);            
                          }
    for(i=0;i<dim;i++){
    somma[i]=seq[i]+seq[i+1];                      
                      }
                      printf("\n");
    printf("la somma e' :\n");
     for(i=0;i<seq[i];i++){
         printf(" %d ",somma[i]);
                          }                                         
    for(i=0;i<dim;i++){
       ris[i]=max(somma[i],somma[i+1]);
      if(ris[i]>ris[i+1]) {
      massimo=ris[i];
                          }else{
      massimo=ris[i+1];                            
                               }
                      }
    printf("\n");                  
    printf("il massimo e' :\n");
         
         printf(" %d ",&massimo); 
         
    return 0;      
                 }
    
             
    int max(int n1, int n2){
          int risultato=n2;
          if(n1>n2)
          risultato=n1;
          else 
          return risultato;                 
                           }
    
  • I<seq non ha senso
  • Lo so ma se metto dim mi continua con le posizioni..cioè numeri
  • Ma che vuoi dire?
  • Avevi ragione...!!!cmq risolto...
Devi accedere o registrarti per scrivere nel forum
12 risposte