Torna indietro   Hardware Upgrade Forum > Software > Programmazione

La Formula E può correre su un tracciato vero? Reportage da Misano con Jaguar TCS Racing
La Formula E può correre su un tracciato vero? Reportage da Misano con Jaguar TCS Racing
Abbiamo visto ancora una volta la Formula E da vicino, ospiti di Jaguar TCS Racing. In questa occasione però curve e rettilinei erano quelli di un circuito permanente, molto diverso dagli stretti passaggi delle strade di Roma
Lenovo LEGION e LOQ: due notebook diversi, stessa anima gaming
Lenovo LEGION e LOQ: due notebook diversi, stessa anima gaming
Lenovo ha puntato forte sul gaming negli ultimi anni e lo testimoniano i marchi LEGION e LOQ, il primo per gli amanti delle massime prestazioni e dell'assenza di compromessi, il secondo per chi desidera soluzioni dal buon rapporto tra prestazioni e prezzo. Abbiamo provato due esponenti dell'offerta, così da capire l'effettiva differenza prestazionale.
Nothing Ear e Ear (a): gli auricolari per tutti i gusti! La ''doppia'' recensione
Nothing Ear e Ear (a): gli auricolari per tutti i gusti! La ''doppia'' recensione
Nothing propone sul mercato non uno ma ben due auricolari nuovi: Ear di terza generazione e Ear (a) ossia un nuovo modello a basso costo pronto a ritagliarsi una fetta di mercato. Entrambi rimangono fedeli al marchio per il design ancora trasparente ma fanno un balzo in avanti notevole per qualità e soppressione del rumore.  
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 17-11-2020, 17:54   #1
Laustol
Junior Member
 
Iscritto dal: Nov 2020
Messaggi: 1
Programma c++

Ciao ragazzi ho scritto questo programma in dev c++ quando lo compilo non mi da nessun errore però la media e il valore assoluto me lo calcola male...Ci sto provando da ieri ma non capisco dove sia il problema..Se qualcuno riesce ad aiutarmi,vi ringrazio!

Vi lascio il codice su Pastebin
https://pastebin.com/WDtU4FZ0
Laustol è offline   Rispondi citando il messaggio o parte di esso
Old 18-11-2020, 08:25   #2
wingman87
Senior Member
 
Iscritto dal: Nov 2005
Messaggi: 2745
Per quanto riguarda la media, se indenti bene il codice vedrai l'errore.
Il minimo valore assoluto invece è concettualmente sbagliato (calcoli il valore assoluto di n, perché?), devi proprio rivedere la funzione.

In generale ti consiglio di formattare bene il codice, rende tutto molto più chiaro e quindi più semplice.
wingman87 è offline   Rispondi citando il messaggio o parte di esso
Old 18-11-2020, 14:01   #3
bio82
Senior Member
 
Iscritto dal: Dec 2007
Messaggi: 1300
Quote:
Originariamente inviato da wingman87 Guarda i messaggi
Per quanto riguarda la media, se indenti bene il codice vedrai l'errore.
Il minimo valore assoluto invece è concettualmente sbagliato (calcoli il valore assoluto di n, perché?), devi proprio rivedere la funzione.

In generale ti consiglio di formattare bene il codice, rende tutto molto più chiaro e quindi più semplice.
per la media è un errore talmente banale che non lo vedrà facilmente... comunque sto aiutando mio nipote a fare esercizi simili sempre in c++ e non digerisco il fatto che non puntino, prima di imparare a scrivere millemila righe di codice, a scrivere bene...indentazione, nomi delle variabili etc...

l'80% degli errori che commette mio nipote (così come gli errori di Laustol) sono dovuti a pessime abitudini (usare n come variabile per indicare la dimensione di un array e indentare male il codice) ... e spesso anche all'utilizzo di un IDE non adeguato... l'indentazione automatica avrebbe evitato l'errore...

bio
bio82 è offline   Rispondi citando il messaggio o parte di esso
Old 18-11-2020, 15:27   #4
Lampo89
Member
 
L'Avatar di Lampo89
 
Iscritto dal: Dec 2006
Messaggi: 33
Un dettaglio più importante: la dimensione di un array deve essere una costante nota a compile time.
Quando le dimensioni di un array non sono note al momento della compila (come vorresti fare in questo caso, dato che "crei un array di dimensione n passata da stdin") si usa allocazione dinamica della memoria, esplicita o nascosta che sia - utilizzando per es. un std::vector.

In altri termini, quel codice non è codice C++ valido, per es. su visual studio (msvc 19.27 per la precisione) non compila:

<source>(41): error C2131: expression did not evaluate to a constant

per credere prova qui: https://godbolt.org/

puoi risolvere usando un std::vector (dovrai però poi cambiare tutte le signatures delle funzioni che hai scritto) o semplicemente con:
int vettore[16] (dato che poni un limite superiore sui valori di "n" accettati)

ps gcc (ma anche clang) permette di definire VariableLengthArray (VLA) ma questa è un'estensione alla specifica ISO C++, ed è quindi non portabile.

Ultima modifica di Lampo89 : 18-11-2020 alle 18:14.
Lampo89 è offline   Rispondi citando il messaggio o parte di esso
Old 04-12-2020, 11:33   #5
ingframin
Senior Member
 
L'Avatar di ingframin
 
Iscritto dal: Apr 2010
Città: Leuven
Messaggi: 667
Quote:
Originariamente inviato da Laustol Guarda i messaggi
Ciao ragazzi ho scritto questo programma in dev c++ quando lo compilo non mi da nessun errore però la media e il valore assoluto me lo calcola male...Ci sto provando da ieri ma non capisco dove sia il problema..Se qualcuno riesce ad aiutarmi,vi ringrazio!

Vi lascio il codice su Pastebin
https://pastebin.com/WDtU4FZ0
Ti ho messo un po' di correzioni nel codice sotto forma di //commento

Codice:
#include <iostream> 
#include<stdlib.h>
#include<math.h>
 
using namespace std; 
 
float media(float Sommatotale, float n) 
{ 
 
   float media= Sommatotale/  n;
   return media; 
}
 
 
int minimo(int vettore[], int n) 
{ 
    int minimo=vettore[0];
    
    for(int i=1; i<n; i++) 
    { 
        if (minimo>vettore[i]) minimo=vettore[i];
    } 
    return minimo; 
}
 
int valore_assoluto(int vettore[], int n)
{ 
    int minimoass=vettore[0]; //=fabs(vettore[0])
    n= fabs(n);//Perché?
    for (int i=1; i<n; i++) 
    { 
        if (minimoass>vettore[i]) minimoass=vettore[i];//minimoass>fabs(vettore[i])
    } 
    return minimoass;
}


int main()
{  
    int n, Sommatotale=0; 

    cout<<"inserire il valore n<=15 per il numero delle componenti del vettore e premere invio: ";
    cin>>n; 

    int vettore[n]; //int *vettore = new int[n]; 
    if (n>15 ) { 
        cout<<"il valore inserito non concede al programma di proseguire "; 
        return 0;
    } 
    for(int i=0; i<n; i++) 
    { 
        cout<<"inserisci il "<<(i+1)<<"* elemento:  "; //"*" sta ad indicare primo,secondo ecc ecc
        cin>>vettore[i] ;
        cout<<endl;//per andare a capo ad ogni componente

        for(int i=0; i<n; i++)
        { 
            Sommatotale+=vettore[i]; 
        } //Questo for loop non deve essere annidato nell'altro!!!!!!!!!!!!!!!!!!!
    } 

    cout<<"la media tra i numeri inseriti e': "<<media(Sommatotale,n)<<endl;
    cout<<"il numero più piccolo tra i vettori assegnati e':  "<<minimo(vettore,n)<<endl;
    cout<<"il numero con il valore assoluto più piccolo tra i vettori assegnati e':  "<<valore_assoluto(vettore,n)<<endl;
//delete[] vettore; Inquesto caso semplice non ci sarebbe bisogno ma in generale per ogni new deve esserci un delete
    return 0;
}
In ogni caso, io lo riscriverei cosí:
Codice:
#include <iostream> 
#include<cmath>
#include<vector>

 
double media(std::vector<int> v) 
{ 
    double sum_of_elems = 0;
    for (auto& n : v){
        sum_of_elems += n;
    }
    
    return sum_of_elems/v.size();
        
}
 
 
int minimo(std::vector<int> v) 
{ 
    int minimo=v[0];
    
    for(auto& n : v) 
    { 
        minimo = (minimo > n)? n : minimo;
    } 
    return minimo; 
}
 
int valore_assoluto(std::vector<int> v)
{ 
    
    int minimo = v[0];
    
    for(auto& n : v) 
    { 
        minimo = (abs(minimo) > abs(n))? n : minimo;
    } 
    return minimo; 
}


int main()
{  
    int n; 

    std::cout<<"inserire il valore n<=15 per il numero delle componenti del vettore e premere invio: ";
    std::cin>>n; 

    std::vector<int> vettore(n);

    if (n>15 ) { 
        std::cout<<"il valore inserito non concede al programma di proseguire "; 
        return 0;
    } 

    for(int i=0; i<n; i++) 
    {   
        
        std::cout<<"inserisci il "<<(i+1)<<"* elemento:  "; //"*" sta ad indicare primo,secondo ecc ecc
        std::cin>>vettore[i] ;
        std::cout<<std::endl;//per andare a capo ad ogni componente

    } 

    std::cout<<"la media tra i numeri inseriti e': "<<media(vettore)<<std::endl;
    std::cout<<"il numero più piccolo tra i vettori assegnati e':  "<<minimo(vettore)<<std::endl;
    std::cout<<"il numero con il valore assoluto più piccolo tra i vettori assegnati e':  "<<valore_assoluto(vettore)<<std::endl;

    return 0;
}
Inoltre le due funzioni per minimo e minimo valore assoluto possono essere unite in una sola funzione (che lascio a te per esercizio ).
In bocca al lupo!

Ultima modifica di ingframin : 04-12-2020 alle 12:35. Motivo: bug nel codice
ingframin è offline   Rispondi citando il messaggio o parte di esso
Old 07-01-2021, 19:37   #6
etiernal
Member
 
Iscritto dal: Aug 2014
Messaggi: 214
siccome la soluzione è già stata proposta, mi limito ad aggiungere qualche commento.

Chiaramente OP sta ancora imparando le basi di C++. Concetti come vector e auto vengono insegnati molto dopo. Stackoverflow è molto bello in questo, perché gli utenti rispondono in modo chiaro al livello dell'OP.

Non è mia intenzione criticare le vostre risposte, però vorrei solo proporvi di fornire spiegazioni al livello dell'audience... È inutile parlare di cose come vector e for-each loop quando non sappiamo nemmeno quale compilatore sta utilizzando OP.
etiernal è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


La Formula E può correre su un tracciato vero? Reportage da Misano con Jaguar TCS Racing La Formula E può correre su un tracciato ...
Lenovo LEGION e LOQ: due notebook diversi, stessa anima gaming Lenovo LEGION e LOQ: due notebook diversi, stess...
Nothing Ear e Ear (a): gli auricolari per tutti i gusti! La ''doppia'' recensione Nothing Ear e Ear (a): gli auricolari per tutti ...
Sony FE 16-25mm F2.8 G: meno zoom, più luce Sony FE 16-25mm F2.8 G: meno zoom, più lu...
Motorola edge 50 Pro: design e display al top, meno il prezzo! Recensione Motorola edge 50 Pro: design e display al top, m...
HiSolution amplia i propri servizi e pun...
F1 24 introdurrà migliorie al mod...
Arriva Omnissa, che prenderà in c...
Turista americano torna dall'Europa e si...
Larian al lavoro su due nuovi giochi, cr...
Microsoft Office LTSC 2024 disponibile i...
Fallout 4 è il gioco più v...
Razer Kishi Ultra: ecco il controller pe...
Il Dimensity 6300 di MediaTek porta il 5...
Google combina i team Android, Chrome e ...
Axiante vuole indagare come le imprese i...
Italia quinto mercato europeo per i vide...
Apple celebra la Giornata della Terra co...
La funzionalità 'AI Explorer' di ...
ASUS ROG Ally: la versione più potente c...
Chromium
GPU-Z
OCCT
LibreOffice Portable
Opera One Portable
Opera One 106
CCleaner Portable
CCleaner Standard
Cpu-Z
Driver NVIDIA GeForce 546.65 WHQL
SmartFTP
Trillian
Google Chrome Portable
Google Chrome 120
VirtualBox
Tutti gli articoli Tutte le news Tutti i download

Strumenti

Regole
Non Puoi aprire nuove discussioni
Non Puoi rispondere ai messaggi
Non Puoi allegare file
Non Puoi modificare i tuoi messaggi

Il codice vB è On
Le Faccine sono On
Il codice [IMG] è On
Il codice HTML è Off
Vai al Forum


Tutti gli orari sono GMT +1. Ora sono le: 21:46.


Powered by vBulletin® Version 3.6.4
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Served by www2v