Domanda Risolto Stampa quadrato di n *

Grayfish

Utente Electrum
2 Ottobre 2016
238
96
4
174
Salve, l'obiettivo era quello di creare un programma che disegnasse un quadrato di asterischi (*) in base al numero inserito dall'utente. Tutto ciò attraverso l'utilizzo di soli cicli while. Ho notato che, per assicurarne il corretto funzionamento, la terza variabile (in questo caso la k) devo dichiararla necessariamente all'interno del ciclo while.
Non vorrei alternative al codice, ma soltanto una motivazione che spieghi perché il programma creato con il seguente codice (quindi con la k dichiarata all'inizio e non nel ciclo) non sortisce il risultato desiderato.

CODICE "ERRATO":
C:
#include <stdio.h>

int main()
{
  int x, y, k;
  y = 0;
  k = 0;


  printf("Enter the number.\n");
  scanf("%d", &x);

  while (y++ < x) {
    while (k++ < x) {
        printf("*");
    }
    printf("\n");
  }


  return 0;
}

CODICE CORRETTO:
C:
#include <stdio.h>

int main()
{
  int x, y;
  y = 0;
  printf("Enter the number.\n");
  scanf("%d", &x);

  while (y++ < x) {
    int k = 0;
    while (k++ < x) {
        printf("*");
    }
    printf("\n");
  }


  return 0;
}
 
Il secondo ciclo ti permette di disegnare le righe che compongono il quadrato, se ad esempio un utente inserisce il numero 4, il tuo ciclo disegna 4 righe da 4 asterischi.
Il primo codice non funziona perchè il K essendo dichiarato fuori dai cicli non viene azzerato e di conseguenza dopo il primo ciclo non sarà più possibile entrare nel ciclo di disegno.
Il secondo di contro è corretto perchè ad ogni ciclo il K viene azzerato e di conseguenza è permesso l'accesso al ciclo di disegno per x volte.
Spero di essere stato abbastanza chiaro, se ti sfugge qualcosa non esitare a chiedere :D
 
Il secondo ciclo ti permette di disegnare le righe che compongono il quadrato, se ad esempio un utente inserisce il numero 4, il tuo ciclo disegna 4 righe da 4 asterischi.
Il primo codice non funziona perchè il K essendo dichiarato fuori dai cicli non viene azzerato e di conseguenza dopo il primo ciclo non sarà più possibile entrare nel ciclo di disegno.
Il secondo di contro è corretto perchè ad ogni ciclo il K viene azzerato e di conseguenza è permesso l'accesso al ciclo di disegno per x volte.
Spero di essere stato abbastanza chiaro, se ti sfugge qualcosa non esitare a chiedere :D
Chiarissimo adesso, grazie!
 
Un consiglio che ti salverà la vita svariate volte mentre programmi: dai nomi alle variabili che richiamino il loro compito. In questo caso non serve, in quanto il programma è molto semplice, ma con progetti più grandi diventi matto, sopratutto quando riprendi in mano il codice dopo un po di tempo :asd:
 
Un consiglio che ti salverà la vita svariate volte mentre programmi: dai nomi alle variabili che richiamino il loro compito. In questo caso non serve, in quanto il programma è molto semplice, ma con progetti più grandi diventi matto, sopratutto quando riprendi in mano il codice dopo un po di tempo :asd:
Ahahaha si si lo so, grazie!