Interruzione lettura vettore

di il
3 risposte

Interruzione lettura vettore

Salve, ho realizzato questo algoritmo che permette l'interruzione della lettura di un vettore ,tuttavia quando vado a compilare il programma con l'implementazione di questo codice il programma non mi restituisce valori corretti, cosa posso aver sbagliato? Grazie.

    do{
        printf("Inserisci un numero alla volta compreso tra 18 e 90: ");
        scanf("%d",&e);
        if (e<=90 && e>=18){
        E[i]=e;
        ++i;
        }else if (e!=z)
         printf("Non puoi inserire valori <18 e >90\n");
    }while (i<=DIM && e!=z);  //carattere di fine lettura = 1
Questo è il codice completo del programma in caso potesse servire:
/*Leggere in input un elenco E di numeri interi compresi tra 18 e 90, estremi inclusi, contenente almeno 10 elementi. Considerare i controlli sugli input.
Calcolare il valore di E piu’ presente e quello meno presente in E.
Visualizzare i risultati ottenuti.
Esempio:
E = (19, 23, 25, 67, 19, 67, 25, 19, 25, 19)
Valore piu’ presente = 19
Valore meno presente = 23*/

#include <stdio.h>
#include <stdlib.h>
#define DIM 50

void Frequenza(int C[DIM],int E[DIM]);
int ValoreMenoPresente(int C[DIM],int E[DIM]);
int ValorePiuPresente(int C[DIM],int E[DIM]);
void StampaPresenza(int MinPres,int MaxPres);

int main()
{
    int z;
    int e;
    z=1;
    int  E[DIM],C[DIM];
    int i=1;
    int MinPres;
    int MaxPres;

    do{
        printf("Inserisci un numero alla volta compreso tra 18 e 90: ");
        scanf("%d",&e);
        if (e<=90 && e>=18){
        E[i]=e;
        ++i;
        }else if (e!=z)
         printf("Non puoi inserire valori <18 e >90\n");
    }while (i<=DIM && e!=z);  //carattere di fine lettura = 1

    if (i>=10){
         Frequenza(C,E);
         MinPres=ValoreMenoPresente(C,E);
         MaxPres=ValorePiuPresente(C,E);
         StampaPresenza(MinPres,MaxPres);
    }else
    printf("devono essere presenti almeno 10 elementi \n");
    system("pause");
    return 0;
}

void Frequenza(int C[DIM],int E[DIM])
{

   int i=1;
   while (i<=DIM){
       int j=1;
       int count=0;
       while (j<=DIM){
         if (E[i]==E[j]){
         ++count;
         C[i]=count;
         }
         ++j;
       }
   ++i;
   }
   return;

}

int ValoreMenoPresente(int C[DIM],int E[DIM])
{
    int MinFreq;
    int k=0;
    int end=0;
    while (k<=1000 && end==0){
       int j=1;
       while (j<=DIM){
           if (C[j]==k){
              MinFreq=E[j];
              end=1;
           }
       ++j;
       }
    ++k;
    }

    return MinFreq;
}

int ValorePiuPresente(int C[DIM],int E[DIM])
{
    int MaxFreq;
    int k=1000;
    int end=0;
    while (k<=1000 && end==0){
       int j=1;
       while (j<=DIM){
           if (C[j]==k){
              MaxFreq=E[j];
              end=1;
           }
        ++j;
        }
    --k;
    }

    return MaxFreq;
}

void StampaPresenza(int MinPres,int MaxPres)
{
     printf("Il numero meno frequente e': %d\n",MinPres);
     printf("Il numero piu' frequente e': %d\n",MaxPres);
     return;
}

3 Risposte

  • Re: Interruzione lettura vettore

    "il programma non mi restituisce valori corretti" che vuol dire? Cosa c'entra quel do...while dell'input?
  • Re: Interruzione lettura vettore

    Vuol dire che l'ultimo passaggio , ovvero la funzione "void StampaPresenza(int MinPres,int MaxPres);" mi restituisce valori errati.
    Mentre se definisco la dimensione del vettore DIM a 10 in modo tale che non abbia la necessità di inserire il carattere di fine lettura del vettore, la funzione mi restituisce i valori esatti.
    Riguardo al do..while , mi sa che non ho capito la tua domanda , in ogni caso il do while permette di leggere il numero da inserire nel vettore finchè il vettore si riempe e finchè non è presente il numero 1 ,ovvero il numero che segna la fine della lettura del vettore.
  • Re: Interruzione lettura vettore

    thomas99 ha scritto:


    Vuol dire che l'ultimo passaggio , ovvero la funzione "void StampaPresenza(int MinPres,int MaxPres);" mi restituisce valori errati.
    Mentre se definisco la dimensione del vettore DIM a 10 in modo tale che non abbia la necessità di inserire il carattere di fine lettura del vettore, la funzione mi restituisce i valori esatti.
    E tutto questo l'avevi detto nel primo post?
    Riguardo al do..while , mi sa che non ho capito la tua domanda , in ogni caso il do while permette di leggere il numero da inserire nel vettore finchè il vettore si riempe e finchè non è presente il numero 1 ,ovvero il numero che segna la fine della lettura del vettore.
    Quello va bene, infatti non credo proprio sia quello il problema, anche se i esce con un elemento in più (se ne inserisci 5, i varrà 6 ... se ne inserisci 20 i uscirà con 21 ...).

    I problemi stanno nelle altre funzioni che sono abbastanza "strane" ...

    E poi, perché fai partire l'indice i da 1 ? Gli array partono da 0.
Devi accedere o registrarti per scrivere nel forum
3 risposte