Problemi con creazione software semplice

di il
7 risposte

Problemi con creazione software semplice

Ragazzi sono neofita ma sto intraprendendo ormai da poco più di un mese un corso che spero mi faccia imparare a sviluppare software e quant'altro. Durante il corso mi sono inbattuto in un piccolo esamino quale:

Scrivi un software di valutazione scolastica: dato un array che
rappresenta i voti delle varie materie il sw dovrà:
1. Scrivere in output la media dei voti contenuti nell’array
2. Se c’è quanche voto <0 o >10 il sw dovrà stampare l’output: dati
non validi ed interrompere l’esecuzione
3. Dire quante insufficienze (voto<6) ci sono
4. Se ci sono più di 3 insufficienze o se la media è<6 dovrà scrivere
come output:”BOCCIATO!!” altrimenti stamperà i giudizi
(sufficiente, buono, ottimo) a seconda della media
Nel software ci dovrà essere:
1. Una una funzione che ha come parametro in ingresso un array e
restituisce la media dei valori dell’array
2. Una una funzione che ha come parametro in ingresso un array e
restituisce true o false a seconda se i dati sono validi o meno
3. Una una funzione che ha come parametro in ingresso un array e
mi dica quante insufficienze ci sono
4. una istruzione switch per la stampa dei giudiz
5. tutto il codice dovrà essere correttamente commentato



Dati i punti ho cominciato a pregrammare ma non sto riuscendo a tirare fuori un risultato di livello. Addirittura sull'ultimo punto non riesco a far uscire nessun output.



RAGAZZI PIù CHE LA SOLUZIONE VORREI SE POSSIBILE UNA SPIEGAZIONE. PERCHè SENZA CAPIRE NON SI VA AVANTI. GRAZIE



NB: LE MIE PROVE

function media(arr) {
var sommaVoti=0;
for (a=0; a<arr.length;a++) {
sommaVoti+=arr[a];
}
var media=sommaVoti/arr.length;
return media;
}
var voti=[6,6,6,6,6,6];
console.log(media(voti));


function votiReali(voti) {
for (a=0;a<voti.length;a++) {
if(voti[a]<0) {
console.log("Dati non validi")
}
if (voti[a]>10) {
console.log("Dati non validi") }
else true;
}
}
votiReali(voti);

function insufficienze(voti) {
var numeroInsufficienze=0;
for (a=0;a<voti.length;a++) {
if(voti[a]<6) {
numeroInsufficienze+=1;
console.log (numeroInsufficienze+" insufficienze"); }
}
}
insufficienze(voti)


var a=(media(voti));
switch (a) {
case (a<6):
console.log("Bocciato");
break;
case (a>=6) :
console.log("Sufficienze");
break;
case (a>=7):
console.log("Buono");
break;
case (a>=8):
console.log("Ottimo");
break;
case (a>=9):
console.log("Eccellente");
break;
}

7 Risposte

  • Re: Problemi con creazione software semplice

    Petraccino ha scritto:


    Ragazzi sono neofita ma sto intraprendendo ormai da poco più di un mese un corso che spero mi faccia imparare a sviluppare software e quant'altro. Durante il corso mi sono inbattuto in un piccolo esamino
    C'è da chiarire innanzitutto che il codice postato non c'entra con la sezione Java. Quello che hai scritto è codice Javascript (e dovresti anche precisare se intenderesti eseguirlo da browser o in un ambiente come Node.js).

    Comunque il codice ha diversi errori tecnici e logici.

    Petraccino ha scritto:


    1. Una una funzione che ha come parametro in ingresso un array e restituisce la media dei valori dell’array
    La funzione media mi sembra corretta.

    Petraccino ha scritto:


    2. Una una funzione che ha come parametro in ingresso un array e restituisce true o false a seconda se i dati sono validi o meno
    La funzione votiReali no, non è corretta (magari es. votiValidi ). Se un valore è <0 oppure >10 puoi già subito ritornare false. Solo alla fine del ciclo (quindi dopo) puoi ritornare true.
    Non è chiaro se una stampa "Dati non validi" vada fatta nella funzione oppure nel chiamante.

    Petraccino ha scritto:


    3. Una una funzione che ha come parametro in ingresso un array e mi dica quante insufficienze ci sono
    La funzione insufficienze è quasi giusta. Solo che per ogni insufficienza stampi il numero. Se hai 3 insufficienze, stampi 3 volte. E' invece più sensato contare prima tutto ... e poi solo dopo il for stampare il conteggio.
    Non è chiaro se la funzione deve stampare il risultato o solo restituire il numero di insufficienze (che verrebbe stampato quindi dal chiamante).

    Petraccino ha scritto:


    4. una istruzione switch per la stampa dei giudiz
    La parte finale non è corretta. Oltretutto, se ben ricordo, in Javascript NON esiste la sintassi case espressione dove espressione è una qualunque espressione risultante in boolean, per mettere es. case x>y.
    I case devono essere valori costanti.
  • Re: Problemi con creazione software semplice

    Ciao e prima di tutto grazie della risposta.


    Perdona l'ignoranza è scritto in javascript e sto lavorando tramite browser.

    E' proprio la risposta con la conta totale delle insufficienze ed anche dei voti non validi che non riesco a far uscire fuori.

    Per quanto riguarda lo switch non riesco a far combaciare i case con i risultati delle funzioni così da poter restiturmi il risultato. Non avendo neanche chiaro il modo con cui posso richiamare il risultato delle funzioni per far funzionare bene lo switch.


    Pultroppo frequento un corso online di soli video e quindi mi trovo impossibilitato ad avere chiarimenti "di persona".


    Sta mattina sveglia presto e vediamo se riusciamo a tirare fuori qualcosa.

    Da impazzire però a tutti i costi voglio fuori il risultato!!!!
  • Re: Problemi con creazione software semplice

    Buongiorno,

    solo grazie alle tue indicazione credo di aver migliorato sensibilmente il software.

    Erano anche errori banali

    Adesso sotto con lo switch!!!!

    Grazie davvero!!!


    function media(arr) {
    var sommaVoti=0;
    for (a=0; a<arr.length;a++) {
    sommaVoti+=arr[a];
    }
    var media=sommaVoti/arr.length;
    return media;
    }
    var voti=[-4,12,6,5,6,6];
    console.log(media(voti));


    function votiValidi(voti) {
    for (a=0;a<voti.length;a++) {
    if(voti[a]<0) {
    console.log("Dati non validi")
    return false;
    }
    else if (voti[a]>10) {
    console.log("Dati non validi")
    return false;}
    }
    return true;
    }
    votiValidi(voti);

    function insufficienze(voti) {
    var numeroInsufficienze=0;
    for (a=0;a<voti.length;a++) {
    if(voti[a]<6)
    numeroInsufficienze+=1;
    }
    console.log (numeroInsufficienze+" insufficienze");
    }
    insufficienze(voti)

    switch (media(voti)) {
    case numeroInsufficienze>=3:
    console.log("Bocciato");
    break;
    case media(voti)<6:
    console.log("Bocciato");
    break;
    case media(voti)<7:
    console.log("Sufficienze");
    break;
    case media(voti)<8:
    console.log("Buono");
    break;
    case media(voti)<9:
    console.log("Ottimo");
    break;
    case media(voti)<=10:
    console.log("Eccellente");
    break;
    }
  • Re: Problemi con creazione software semplice

    Petraccino ha scritto:


    function votiValidi(voti) {
        for (a=0;a<voti.length;a++) {
            if(voti[a]<0) {
                console.log("Dati non validi")
                return false;
            }
            else if (voti[a]>10) {
                console.log("Dati non validi")
                return false;}
        }
                return true;
    }
    Corretto ma se il messaggio è uguale nei due casi, bastava un singolo if con le due condizioni in "or".

    Petraccino ha scritto:


    switch (media(voti)) {
        case numeroInsufficienze>=3:
            console.log("Bocciato");
            break;
    [...]
    Mi correggo, in Javascript il case può avere una espressione "complessa" MA il tipo della espressione nei case deve essere uguale al tipo del valore nello switch, perché il confronto viene fatto con === (strict equality).

    Quindi se una espressione nel case risulta un boolean, allora lo switch va fatto su un boolean (tipicamente un true fisso).
    var media = ....
    
    switch (true) {
    case media < 6: //........
    }
    Detto in altro modo: quale è il primo case la cui espressione è valutata true (il valore dello switch)?

    E conviene tenere la media in una variabile, come mostrato.

    P.S. ti sto rispondendo su argomenti che non sono il mio "pane" quotidiano, io sviluppo in Java, non Javascript.
  • Re: Problemi con creazione software semplice

    Grazie davvero!!

    Hai risolto tutti i miei dubbi

    Un unica cosa sono stato costretto ad usare una variabile insufficiente nello switch

    Poichè la variabile numeroInsufficienze è presente all'interno di una funzione e quindi nel leggibile nel codice esterno(globale)

    copio

    var media=(media(voti));
    switch (true) {
    case insufficienze>=3:
    console.log("Bocciato");
    break;
    case media<6:
    console.log("Bocciato");
    break;
    case media<7:
    console.log("Sufficiente");
    break;
    case media<8:
    console.log("Buono");
    break;
    case media<9:
    console.log("Ottimo");
    break;
    case media<=10:
    console.log("Eccellente");
    break;
    }

    Grazie ancora!!! Alla prossima
  • Re: Problemi con creazione software semplice

    Petraccino ha scritto:


    Un unica cosa sono stato costretto ad usare una variabile insufficiente nello switch
    Sì, corretto, è uno dei punti dell'esercizio che avevi elencato all'inizio. Dopotutto, la media e il numero insufficienze sono due cose distinte. La media potrebbe essere "buona" ma le insufficienze "troppe" quindi ha assolutamente senso che contribuiscano al "bocciato".

    Nota che potevi anche scrivere più semplicemente un singolo case, mettendo in "or" logico (||) le due condizioni:
    case insufficienze >= 3 || media < 6:
        console.log("Bocciato");
        break;
  • Re: Problemi con creazione software semplice

    Ciao...

    giusta osservazione!

    Ti faro sapere come andrà la valutazione.

    Ci sentiamo. E ancora grazie!!!
Devi accedere o registrarti per scrivere nel forum
7 risposte