Domanda Semplice problema c++

Stato
Discussione chiusa ad ulteriori risposte.

NarcoSlayer

Utente Gold
21 Febbraio 2010
729
61
147
323
Ciao a tutti, devo fare un esercizio che mi fa inserire dei numeri float in un array allocato dinamicamente e controlli se l'array è ordinato in maniera crescente, e fa un cout mentre se non è ordinato in maniera crescente lo dica in output e dia il minimo valore nell'array e la relativa posizione, stessa cosa per il massimo... vi lascio il codice da me elaborato, sono sicuro che c'è una piccola svista ma non sto riuscendo a trovarla... grazie a tutti :)

Codice:
#include <iostream>
using namespace std;

//verifico se l'array è ordinato o no
bool verord (float vet[], int dim) {
    for (int i=0; i<dim-1; i++) {
        if (vet[i]<vet[i+1]) {
            return true;
        } else return false;
}
}

//trovo il min il max e la posizione
void asd (float ve[], int di) {
    int posmin=0,posmax=0;
    float min,max;

    min = ve[0];
    max = ve[0];

    for (int i=0; i<di; i++) {
        if (ve[i]< min) {
            min = ve[i];
            posmin = i;
        }
        if (ve[i]>max) {
            max = ve[i];
            posmax = i;
        }
    }
    cout<<"Valore minimo: "<<min<<" "<<"Posizione minimo: "<<posmin<<endl;
    cout<<"Valore massimo: "<<max<<" "<<"Posizione massimo: "<<posmax<<endl;

}

int main() {
    float *arr;
    int d;
    //alloco l'array
    cout<<"Numero elementi vet1: ";
    cin>>d;

    arr = new float[d];

    cout<<"vet1:\n";
    for (int i=0; i<d; i++) {

        cin>>arr[i];
    }
    //controllo se è ordinato o no
    if (verord(arr,d) == true) {
        cout<<"Array ordinato";
    } else {
        cout<<"Array non ordinato"<<endl;
        asd (arr, d);
    }
    //deallocazione array
    delete []arr;


    return 0;
}
 
La funzione verord, scritta così, ritorna true non appena viene incontrata una sequenza di float (vet[i] e vet[i+1]) che sono uno (vet[i+1]) maggiore dell'altro. Quindi una sequenza come: 1, 2, 5, 3, 4, 3, ... sarebbe corretta in quanto alla prima iterazione del ciclo for viene controllato se 1 è minore di 2 - e dato che la condizione è vera viene ritornato true (la funzione termina l'esecuzione ritornando true).
Funzione corretta:
Codice:
bool verord (float vet[], int dim) {
  bool res = true;
  for (int i=0; i<dim-1; i++)
  if (vet[i]>vet[i+1])
  res = false;
  return res;
}
 
  1. Il tuo programma fallisce se inserisco 0 per il 'Numero elementi vet1'. Inoltre, l'intera funzione verord è std::minmax_element. Non consentire 0 come valore di input, oppure modifica le routine in modo da non fare nulla in caso se viene passato 0.
  2. Non usare using namespace std;.
 
La funzione verord, scritta così, ritorna true non appena viene incontrata una sequenza di float (vet[i] e vet[i+1]) che sono uno (vet[i+1]) maggiore dell'altro. Quindi una sequenza come: 1, 2, 5, 3, 4, 3, ... sarebbe corretta in quanto alla prima iterazione del ciclo for viene controllato se 1 è minore di 2 - e dato che la condizione è vera viene ritornato true (la funzione termina l'esecuzione ritornando true).
Funzione corretta:
Codice:
bool verord (float vet[], int dim) {
  bool res = true;
  for (int i=0; i<dim-1; i++)
  if (vet[i]>vet[i+1])
  res = false;
  return res;
}
lol che stonato!! Grazie
 
si ma lo 0 non deve essere inserito quindi non mi interessa creare un controllo... però non capisco perché mi consigli di non usare il namespace...
Non deve essere inserito ma non puoi sapere mai cosa farà l'utente. Potrebbe inserire anche cose come "ciao".
Using namespace è da evitare perché nel caso poi inserisci più di una libreria (oltre a std) e queste librerie contengono nomi uguali allora questi nomi vanno in conflitto generando ambiguità.
 
  • Mi piace
Reazioni: nullptr
Stato
Discussione chiusa ad ulteriori risposte.