Visualizzazione dei risultati da 1 a 10 su 10
  1. #1

    Esercizio C/C/C (Comprensione, Commento, Compilazione)

    Salve a tutti ho un problemino che credo che sarà molto semplice per degli esperti xP.
    Devo Consegnarlo prima di Lunedì 5 e ho poco tempo relativo per farlo. Ecco quì il compito:
    La seguente applicazione e' corretta, ma e' illegibile, sia perche'
    il codice non e' indentato, sia perche' i nomi delle variabili non
    sono significativi, sia perche' non ci sono commenti.

    import fiji.io.*; class Kefa{public static
    void main(String[] args){int x; int y
    ;boolean k; int z; //pre: n>0
    System.out.println("Scrivi un numero >0");x =
    Lettore.in.leggiInt();y = 2;k = false;z =
    (int)Math.sqrt(x); while (!k && (y<=z)){if (x%y== 0)k
    = true;y = y +1;}if (k)System.out.println("NON e' xxxxx");
    else System.out.println("E' xxxxx");}}

    - Crea un file Kefa.java e ricopia il codice scritto sopra.

    - Scrivi la classe in modo che ci sia una istruzione per riga e indentalo correttamente.

    - Indica, nei commenti, quale problema risolve, poi rinomina le variabili usando nomi significativi, che rendano il programma leggibile e commentalo opportunamente.

    Allore io ho creato il file java e indentato (spero) correttamente ed è uscito questo:
    codice:
    import fiji.io.*;
    class Kefa {
        public static void main(String[] args) {
            int x;
            int y;
            boolean k;
            int z; //pre: n>0
            System.out.println("Scrivi un numero >0");
                x = Lettore.in.leggiInt();
                y = 2;
                k = false;
                z = (int)Math.sqrt(x);
    
            while (!k && (y<=z)) {
            if (x%y== 0)
                k = true;
                y = y +1;
            }
            if (k)System.out.println("NON e' xxxxx");
            else System.out.println("E' xxxxx");
        }
    }
    Ovviamente è un esercizio di comprensione che deve servire a me, è ovvio, quindi non chiedo di svolgerlo per me completo bensì di aiutarmi e darmi spiegazioni/aiuti affinchè possa capire.
    Mi potete dare una mano? Ringrazio Anticipatamente.
    Per qualsiasi cosa, chiedete! Grazie

  2. #2
    Utente di HTML.it
    Registrato dal
    Dec 2009
    Messaggi
    1,123
    Non è proprio corretto. Così lo è:

    codice:
    import fiji.io.*; 
    
    class Kefa{
      public staticvoid main(String[] args){
        int x; 
    	int y;
    	boolean k; 
    	int z; //pre: n>0
        System.out.println("Scrivi un numero >0");
    	x = Lettore.in.leggiInt();
    	y = 2;
    	k = false;
    	z = (int)Math.sqrt(x); 
    	while (!k && (y<=z)){
    	  if (x%y== 0) k = true;
    	  y = y +1;
    	}
    	if(k) System.out.println("NON e' xxxxx");
        else System.out.println("E' xxxxx");
      }
    }
    Ti darei anche spiegazioni, ma non ho capito qual è il tuo problema.
    Ciò che ti manca è questo:
    Indica, nei commenti, quale problema risolve, poi rinomina le variabili usando nomi significativi, che rendano il programma leggibile e commentalo opportunamente

  3. #3
    Primo aiuto: questo codice
    codice:
    	while (!k && (y<=z)){
    	  if (x%y== 0) k = true;
    	  y = y +1;
    	}
    fai conto che lo puoi riscrivere così (secondo me molto più chiaro):
    codice:
    for( ; y<=z; y++)
        if(x%y==0)
            break;
    Ora, che cosa vuol dire verificare che x%y==0?
    Amaro C++, il gusto pieno dell'undefined behavior.

  4. #4
    Scusate se ho risposto ora ma ho avuto problemi di connessione

    Originariamente inviato da MItaly
    fai conto che lo puoi riscrivere così (secondo me molto più chiaro):
    codice:
    for( ; y<=z; y++)
        if(x%y==0)
            break;
    Ora, che cosa vuol dire verificare che x%y==0?
    x%y==0 vuol dire "se è resto uguale a 0" giusto?

    io ci ho ragionato un attimo sopra e ho visto che se non sbaglio questo programma possa calcolare se il numero è primo o no (giusto?)

    Se è giusto l'ho riscritto così almeno per commentarlo un attimo. ditemi se va bene

    codice:
    import fiji.io.*;
    /* Permette di determinare se un numero è primo */
    class Kefa{
      public static void main(String[] args){
        int x;
    	int y;
    	boolean k;
    	int z; //pre: n>0
        System.out.println("Scrivi un numero >0");
    	x = Lettore.in.leggiInt();
    	y = 2;
    	k = false;
    	z = (int)Math.sqrt(x);
    	while (!k && (y<=z)){
    	  if (x%y== 0) k = true;
    	  y = y +1;
    	}
    	if(k) System.out.println("NON e' Primo");
        else System.out.println("E' Primo");
      }
    }
    EDIT: cmqe sia devo rinominare le variabili con nomi significativi e dare opportuni commenti (dove necessario), è anche questo un punto interrogativo xP. [sono un disastro xD]

  5. #5
    Utente di HTML.it
    Registrato dal
    Dec 2009
    Messaggi
    1,123
    Si, verifica se un numero è primo o no.

    Tu che nomi daresti alle variabili?
    La x ad esempio, potrebbe diventare semplicemente "n" oppure "numero", oppure ancora "input".

  6. #6
    La x potrebbe diventare input (come suggerito xP) , la z potrei metterla come radice, ma la k e la y boh xD (converrebbe lasciarle così o sarebbe sempre meglio dare nomi alle variabili che facciano comprendere al 100%?)

    codice:
    import fiji.io.*;
    /* Permette di determinare se un numero è primo */
    class Kefa{
      public static void main(String[] args){
        int input;
    	int y;
    	boolean k;
    	int radice; //pre: n>0
        System.out.println("Scrivi un numero >0");
    	input = Lettore.in.leggiInt();
    	y = 2;
    	k = false;
    	radice = (int)Math.sqrt(input);
    	while (!k && (y<=radice)){
    	  if (input%y== 0) k = true;
    	  y = y +1;
    	}
    	if(k) System.out.println("Il numero NON e' Primo");
        else System.out.println("Il numero E' Primo");
      }
    }
    Diciamo che così è il risultato del lavoro. altri commenti utili da inserire?

  7. #7
    Utente di HTML.it
    Registrato dal
    Nov 2009
    Messaggi
    755
    Secondo me dovresti dare un nome indicativo anche a k e y , vorrei darti qualche suggerimento ma se lo facessi ti avrei risolto l'enigma sarebbe meglio se ci arrivassi tu..ci sei , hai capito cosa fa il programma , hai capito a cosa servono quelle variabili dunque non dovrebbe essere molto difficile contrassegnarle con un identificativo no?

    Ps. ah presta attenzione al nome che darai a "k"


  8. #8
    codice:
    while (!k && (y<=radice)){
        if (input%y== 0) k = true;
        y = y +1;
    la y da come ho capito quì fa si che quando relazionato (diviso) con la variabile input dando valore 0 fa intuire che è divisibile per un numero primo e quindi non primo.
    potrei dare alla variabile "y" il nome "divisore" opp "divisoreprimo" ma in questo caso non so quanto sia corretto. mentre a "k" mi fa pensare a qualcosa tipo pari/dispari ma non so quanto centri xD.

  9. #9
    Utente di HTML.it
    Registrato dal
    Nov 2009
    Messaggi
    755
    dai almeno ti sei sforzato un po'
    Io avrei dato i nomi:
    x -> input
    y -> divisore oppure divisoreCorrente
    z -> radice o soglia
    k -> isNonPrimo o nonPrimo



  10. #10
    Mi avete salvato veramente. Siete stati gentilissimi e molto disponibili. Grazie Mille.
    Per sicurezza inserisco il codice finale pronto (anche con piccoli commenti scemi xP).

    codice:
    import fiji.io.*;
    /* Permette di determinare se un numero è primo */
    class Kefa{
      public static void main(String[] args){
    	  /* Variabili */
            int input;
    	    int divisoreCorrente;
        	boolean nonPrimo;
    	    int radice; //pre: n>0
    	    /* Corpo Programma */
        System.out.println("Scrivi un numero >0");
    	    input = Lettore.in.leggiInt();
    	    divisoreCorrente = 2;
    	    nonPrimo = false;
    	    radice = (int)Math.sqrt(input);
        while (!nonPrimo && (divisoreCorrente<=radice)){
    	    if (input%divisoreCorrente== 0) nonPrimo = true;
    	    divisoreCorrente = divisoreCorrente +1;
        }
        /* output */
    	if(nonPrimo) System.out.println("Il numero NON e' Primo");
        else System.out.println("Il numero E' Primo");
      }
    }

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.