Diagrammi di flusso..da dove cominciare? ._.

Sempre io e sempre alle tragicomiche prese con l'informatica.

in pratica devo arrivare a formulare un diagramma di flusso che consenta di produrre la stampa seguente:

XY+XY+ XY+ XY+ XY+ XY+ XY+ XY+XY
XY+XY+ XY+ XY+ XY+ XY+ XY
XY+ XY+ XY+ XY+ XY
XY+ XY+ XY
XY

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.
basta che inserisci un ciclo nel diagramma.. ma sai programmare?
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.
vado a mangiare dopo ti faccio il disegnino
Yuppy. :yuppi:

Basta un semplice ciclo for che decrementi di due e stampi ogni volta.


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.
Ho fatto una cosa simile ma non uguale..un ciclo for con decremento di uno ad ogni passaggio

import java.util.*;

public class Diagramma {

public static void main(String[] args)

{

int A;
int i;

Scanner sc = new Scanner(System.in);

System.out.println("Digitare un numero");
A = sc.nextInt();
for (i=10;i>0;i=i-1)

{

System.out.println("Numero " +i);

}
}
}


il risultato è



Digitare un numero
10
Numero 10
Numero 9
Numero 8
Numero 7
Numero 6
Numero 5
Numero 4
Numero 3
Numero 2
Numero 1



Ci sono andato un pelo vicino? cosa devo aggiungere e sostituire per arrivare a quello che hai scritto tu? grazie..
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");
}

}
}
Grazie mille, sto iniziando a capirci qualcosa veramente. Ma una cosa non ho capito: nel primo ciclo for, perchè i=9?
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
pigoz sei un grande.

In pratica quel

while ( j < (i+2) ) {
System.out.print("Z");
j++;


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ì?
si esattamente, e visto che il corpo del for finisce con quel while, passi all passo successivo del for
Che casino..ma pare che tutto stia nel capire dove comincia e dove finisce un ciclo, e a cosa è riferito il System.out.print("x")..vediamo..
Ancora..colgo la palla al balzo.

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
@iRoN///: direi che hai capito come funziona la questione