Torna indietro   Hardware Upgrade Forum > Software > Programmazione

Recensione Samsung Galaxy S26 Ultra: finalmente qualcosa di nuovo
Recensione Samsung Galaxy S26 Ultra: finalmente qualcosa di nuovo
Per diversi giorni il Galaxy S26 Ultra di Samsung è stato il nostro compagno di vita. Oltre alle conferme del colosso coreano come la qualità del display e una suite AI senza rivali, arriva il Privacy Display, un unicum nel mondo smartphone. Ci sono ancora alcuni gap che non sono riusciti a colmare lato batteria e fotocamera, seppur con alcuni miglioramenti.
Diablo II Resurrected: il nuovo DLC Reign of the Warlock
Diablo II Resurrected: il nuovo DLC Reign of the Warlock
Abbiamo provato per voi il nuovo DLC lanciato a sorpresa da Blizzard per Diablo II: Resurrected e quella che segue è una disamina dei nuovi contenuti che abbiamo avuto modo di sperimentare nel corso delle nostre sessioni di gioco, con particolare riguardo per la nuova classe dello Stregone
Deep Tech Revolution: così Area Science Park apre i laboratori alle startup
Deep Tech Revolution: così Area Science Park apre i laboratori alle startup
Siamo tornati nel parco tecnologico di Trieste per il kick-off del programma che mette a disposizione di cinque startup le infrastrutture di ricerca, dal sincrotrone Elettra ai laboratori di genomica e HPC. Roberto Pillon racconta il modello e la visione
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 17-11-2020, 18: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, 09:25   #2
wingman87
Senior Member
 
Iscritto dal: Nov 2005
Messaggi: 2788
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, 15:01   #3
bio82
Senior Member
 
Iscritto dal: Dec 2007
Messaggi: 1564
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, 16: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 19:14.
Lampo89 è offline   Rispondi citando il messaggio o parte di esso
Old 04-12-2020, 12: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 13:35. Motivo: bug nel codice
ingframin è offline   Rispondi citando il messaggio o parte di esso
Old 07-01-2021, 20: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


Recensione Samsung Galaxy S26 Ultra: finalmente qualcosa di nuovo Recensione Samsung Galaxy S26 Ultra: finalmente ...
Diablo II Resurrected: il nuovo DLC Reign of the Warlock Diablo II Resurrected: il nuovo DLC Reign of the...
Deep Tech Revolution: così Area Science Park apre i laboratori alle startup Deep Tech Revolution: così Area Science P...
HP OMEN MAX 16 con RTX 5080: potenza da desktop replacement a prezzo competitivo HP OMEN MAX 16 con RTX 5080: potenza da desktop ...
Recensione Google Pixel 10a, si migliora poco ma è sempre un'ottima scelta Recensione Google Pixel 10a, si migliora poco ma...
Ultimo giorno di Offerte di Primavera: u...
Come ha fatto Giancarlo Devasini a diven...
Dopo 13 anni cade la fortezza Xbox One: ...
Gli aggiornamenti delle stampanti HP che...
AWS al MWC 2026: quando il cloud diventa...
Project Genie non è un tool per l...
Elon Musk, il progetto TeraFab è ...
Instagram eliminerà la crittograf...
Il paradosso della crisi delle memorie: ...
SSD Samsung 9100 PRO 4TB, 14.800 MB/s, P...
Prezzo senza rivali: MSI Katana con RTX ...
Samsung T7 2TB crolla su Amazon a 159€: ...
Spotify introduce 'Taste Profile': il co...
Sole e pioggia insieme: il nuovo pannell...
AWS e Cerebras uniscono le forze: nuova ...
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: 10:13.


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