Domanda Risolto ESERCIZIO ARRAY C++

Stato
Discussione chiusa ad ulteriori risposte.

iSxND

Utente Bronze
3 Luglio 2018
30
11
4
30
Sono all'inizio per quanto riguarda lo studio degli Array.
In questo esercizio la richiesta era:
Scrivere un programma che legge da input una sequenza di numeri interi e li memorizza in un array e successivamente calcola la somma degli elementi dell’array.
C++:
#include <iostream>
using namespace std;
const int MAX_NUM = 10;
int main(){
int v[MAX_NUM],n,n1,i;
for (int i=0; i < MAX_NUM; i++){ //che legge da input una sequenza  di numeri interi, li memorizza in un array
    cout << "Inserisci l'elemento " << i+1 << " del vettore: " << flush;
    cin >> v[i];
    }
int somma=0; //Calcola la somma degli elementi dell’array
for(int i=0; i<MAX_NUM; i++){
        somma += v[i];
        cout << somma;
    }
}
 
Ciao, non ho capito però qual è la domanda, se c'è.
L'unica cosa che ti segnalo è che la somma dei valori dell'array la dovrai stampare solo 1 volta, quindi dovresti portarla fuori dal ciclo.

Quindi da così:
C++:
for(int i=0; i<MAX_NUM; i++){
        somma += v[i];
        cout << somma;
    }
}

Diventa:
C++:
for(int i=0; i<MAX_NUM; i++)
        somma += v[i];
  
cout << somma;

Ps. fai anche attenzione all'indentazione, come ti aveva spiegato anche St3v3 in un altro topic.
 
  • Mi piace
Reazioni: iSxND
Ultima modifica:
Ciao, non ho capito però qual è la domanda, se c'è.
L'unica cosa che ti segnalo è che la somma dei valori dell'array la dovrai stampare solo 1 volta, quindi dovresti portarla fuori dal ciclo.

Quindi da così:
C++:
for(int i=0; i<MAX_NUM; i++){
        somma += v[i];
        cout << somma;
    }
}

Diventa:
C++:
for(int i=0; i<MAX_NUM; i++)
        somma += v[i];
a
cout << somma;

Ps. fai anche attenzione all'indentazione, come ti aveva spiegato anche St3v3 in un altro topic.
Ti ringrazio, che spadato!
Le richieste dell'esercizio sono:
-Scrivere un programma che legge da input una sequenza di numeri interi, li memorizza in un array e che
-Calcola la somma degli elementi dell'array
-Calcola la media degli elementi dell’array
-Calcola il massimo degli elementi dell’array (e stampa sia il valore massimo che la posizione occupata dal massimo) = Su questo ultimo punto sono perplesso, non capisco se lo scopo è quello di fare in modo che ogni valore dell'array stampi il valore massimo,e che successivamente vada a calcolarne il valore massimo o come l'ho sviluppato a modo mio, dove riferisce solamente la dimensione massima dell'array, ma sicuramente non è la cosa giusta

Mentre per quanto riguarda la posizione occupata dal valore massimo so che si calcola attraverso gli elementi associati per ognuno degli indirizzi infine sommando a.
(A + D*i)

C++:
#include <iostream>
using namespace std;
const int MAX_NUM = 10;
const bool debug = true;   //CONTROLLO CHE POSSO EFFETTUARE O FAR SCOMPARIRE QUANDO NON MI SERVE
int main(){
    int v[MAX_NUM],media,massimo;
    if (debug) cout << v << endl; //INDIRIZZO BASE ARRAY v[i]
    for (int i=0; i < MAX_NUM; i++){ //che legge da input una sequenza  di numeri interi, li memorizza in un array
        cout << "Inserisci l'elemento " << i+1 << " del vettore: " << flush;
        cin >> v[i];
    }

    int somma=0; //Calcola la somma degli elementi dell’array
    for(int i=0; i<MAX_NUM; i++)
        somma += v[i];
    cout << "\nLa somma e' la seguente: " << somma << endl;
    media = somma/MAX_NUM; //Calcola la media degli elementi dell’array
    cout << "\nLa media e' la seguente: " << media << endl;

    do{  //Calcola il massimo degli elementi dell’array -> L'ERRORE DOVREBBE ESSERE QUA
        int i=0;
        v[i]= MAX_NUM;
        cout << "\nLa posizione del valore massimo e' " << v[i];
   }
    while(v==0);
        cout << v << endl;
}

Per quanto riguarda la indentazione cercherò di fare qualche esercizio o di leggermi qualcosa.
 
C++:
    do{  //Calcola il massimo degli elementi dell’array -> L'ERRORE DOVREBBE ESSERE QUA
        int i=0;
        v[i]= MAX_NUM;
        cout << "\nLa posizione del valore massimo e' " << v[i];
   }
    while(v==0);

Si, qui c'è un errore.
L'esercizio vuole che trovi il valore massimo presente nell'array, e poi che stampi a video sia questo valore, sia l'indice che ha nell'array.
Il valore massimo puoi già ricavarlo quando leggi i valori nel primo ciclo for, o in alternativa facendo un nuovo ciclo.

Se lo leggi all'inizio, puoi inizializzare "massimo" a un valore che sarà sicuramente minore di quello inserito dall'utente; puoi usare la costante INT_MIN, includendo questo header #include <bits/stdc++.h>.
C++:
int massimo = INT_MIN;
for(int i=0, i<MAX_NUM; i++) {
  // if massimo < v[i]....
}

Oppure in maniera analoga in un nuovo loop, dove puoi assegnare a massimo il valore dell'indice 0 dell'array, quindi tipo:
C++:
int massimo = v[0];

for(int i=1; i<NUM_MAX; i++) {
  // if massimo...
}

Fatto ciò, in "massimo" hai il valore massimo; per la posizione puoi usare un'altra variabile.

EDIT:

Come alternativa, puoi fare una cosa come questa...
C++:
using namespace std;
int main()
{
    int values[5] = {4,5,6,1,7};
    int index = 0;
    for(int i = 1; i < 5; i++) {
        if(values[index] < values[i])
            index = i;
    }
  
    cout << index << " " << values[index];
}
 
  • Mi piace
Reazioni: iSxND
C++:
    do{  //Calcola il massimo degli elementi dell’array -> L'ERRORE DOVREBBE ESSERE QUA
        int i=0;
        v[i]= MAX_NUM;
        cout << "\nLa posizione del valore massimo e' " << v[i];
   }
    while(v==0);

Si, qui c'è un errore.
L'esercizio vuole che trovi il valore massimo presente nell'array, e poi che stampi a video sia questo valore, sia l'indice che ha nell'array.
Il valore massimo puoi già ricavarlo quando leggi i valori nel primo ciclo for, o in alternativa facendo un nuovo ciclo.

Se lo leggi all'inizio, puoi inizializzare "massimo" a un valore che sarà sicuramente minore di quello inserito dall'utente; puoi usare la costante INT_MIN, includendo questo header #include <bits/stdc++.h>.
C++:
int massimo = INT_MIN;
for(int i=0, i<MAX_NUM; i++) {
  // if massimo < v[i]....
}

Oppure in maniera analoga in un nuovo loop, dove puoi assegnare a massimo il valore dell'indice 0 dell'array, quindi tipo:
C++:
int massimo = v[0];

for(int i=1; i<NUM_MAX; i++) {
  // if massimo...
}

Fatto ciò, in "massimo" hai il valore massimo; per la posizione puoi usare un'altra variabile.

EDIT:

Come alternativa, puoi fare una cosa come questa...
C++:
using namespace std;
int main()
{
    int values[5] = {4,5,6,1,7};
    int index = 0;
    for(int i = 1; i < 5; i++) {
        if(values[index] < values[i])
            index = i;
    }

    cout << index << " " << values[index];
}
Ti ringrazio con questo tuo ultimo edit ho compreso in pieno il concetto!
 
  • Mi piace
Reazioni: DispatchCode
Stato
Discussione chiusa ad ulteriori risposte.