da dove mi conviene iniziare? i diagrammi di flusso che conosco io sono proprio basilari e non ho idea di come muovermi per stampare quell'accozzaglia di xy.
So far dire ad un programma "Hello World" tramite linguaggio Java e so fargli scegliere il numero maggiore fra due numeri interi, se può essere utile come informazione.
Questa soluzione dovrebbe essere corretta. Usa due variabili, i che tiene traccia del passo a cui si è arrivati e s che serve per lavorare. Se non ti è chiaro fammi sapere. Le frecce che tornano a un punto precedente servono appunto per ripetere la stessa operazione un certo numero di volte. Nei linguaggi di alto livello vengono tradotte in costrutti come for e while, detti appunto cicli o loop. Essi costituiscono la base della programmazione.
Ok grazie mille, il ciclo for lo avevo inquadrato ma non ne ero sicuro. Stasera proverò a scriverlo su java e poi lo metto qui..vedremo se riuscitò a cavare qualcosa dal buco.
Mentre lo scrivevo in java mi sono accorto di aver sbagliato le condizioni di bordo (sarebbe rispettivamente i>0 e s>0):
Questa è circa l'esatta riscrittura del diagramma di flusso, ma in java:
public class Diagramma {
public static void main(String[] args) { for (int i = 9; i > 0; i = i-2){ //System.out.println("Siamo al passo: " +i); for (int s = i; s > 0; s = s-1){ if (s - i == 0){ System.out.print("XY"); } else { System.out.print("+XY"); } } System.out.print("\n"); }
di fatto ad ogni passo stampi un numero di XY che è pari all'indice i (e nell'esercizio al primo passo si parte da 9). Poi come chiede nell'esercizio ad ogni passo diminuisci i di 2, in modo da stampare due XY in meno ad ogni riga.
Questo è un esercizio tipico dell'esame, il prof ci fornisce un testo e ci chiede "se inserisco X e Y, cosa stampa il programma?"
metto un esempio tipico..sono quasi tutti molto simili:
Cosa stampa in uscita il seguente programma se in ingresso viene fornito dall'operatore il valore 10 seguito dal valore 1?
import java.util.*;
public class Prova {
public static void main(String[] args) {
int a , b , i , j; System.out.println("Inserire due numeri interi: "); a=sc.nextInt(); b=sc.nextInt(); for (i=0;ij=b; System.out.println("K"); while ( j < (i+2) ) { System.out.print("Z"); j++;
} } }
il risultato è:
K ZK ZZZZK ZZZZZZZK ZZZZZZZZZZ
Qualche anima pia mi può spiegare come si è arrivati a quella stampa, passo per passo? grazie..
Ti consiglio di postare il codice sempre indentato: aiuta di più a vedere le cose a colpo d'occhio: import java.util.*;
public class Esame {
public static void main(String[] args) {
int a , b , i , j; a=10; b=1; for (i=0;i j=b; System.out.println("K"); //(a) while ( j < (i+2) ) { System.out.print("Z"); //(b) j++;
} } } }
Soluzione: Come vedi hai due cicli uno dentro l'altro (innestati): la "difficoltà" in questo esercizio è che con la riga while ( j < (i+2) ) il numero di volte che viene ripetuto il ciclo interno dipende dall'indice che identifica il ciclo esterno.
Passaggi: (a) i=0, j=1: stampo K e vado a capo
la condizione per i=0 diventa: while(j<0+2): (b) i=0, j=1: stampo Z
(a) i=3, j=1: stampo K e vado a capo
la condizione per i=3 diventa: while(j<3+2): (b) i=3, j=1: stampo Z (b) i=3, j=2: stampo Z (b) i=3, j=3: stampo Z (b) i=3, j=4: stampo Z
(a) i=6, j=1: stampo K e vado a capo così via per i=6 e i=9, il passo dopo sarebbe i=12 ma la condizione sul primo ciclo è i<10
sta a significare: finchè j resta minore di i + 2 stampa "Z", incrementa j di 1 e riconfrontala. Quando j diventa uguale a i + 2, ritorna al for. E' così?
Abbiamo a, b, c, con relativi valori 1, 3, 2. I contatori i e j valgono 0.
a=sc.nextInt(); b=sc.nextInt(); c=sc.nextInt(); while (j// finchè j resta inferiore a b esegui tutto il ciclo if (J==c) System.out.print (a) // se j è uguale a c, stampa il valore di a System.out.println("Z"); // a prescindere dal resto, finchè il ciclo va, stampa Z e vai a capo for (i=0;i// confronta i con b, se i < b stampa S e ripeti aumentando i di 2 unità ogni volta. Quando i non è più < b, aumenta j di una unità e ricomincia il ciclo System.out.print("S"); } j++; } } }
Intanto, è giusto quello che ho scritto al fianco? e inoltre, nel ciclo for, una volta che incremento "i" di 2 unità, quando ricomincio il ciclo dal while, "i" vale di nuovo 0 oppure tiene il valore che gli è stato incrementato nel ciclo for?
si è giusto se qui: if (J==c) System.out.print (a) attento che J e j son due variabili diverse e che manca il ; a fine riga.
per quanto riguarda il valore di i, questo rimane invariato, cioè uguale a quello di uscita dal ciclo for, fino a quando non riesegui il ciclo for, nel qual caso ad i viene assegnato il valore 0. Puoi sempre far delle prove andando a stampare il valore di i nel programma per renderti conto di come evolve se non mi son spiegato bene