Pagina 1 di 1

Questo semplice programmino in C si può sintetizzare?

MessaggioInviato: 27 giu 2017, 12:31
da Luigi97
Chiedo scusa se nel giro di poche ore posto un'altra domanda (prometto che mi do una calmata :D )
Vorrei sapere... questo programma qui:
Codice: Seleziona tutto
#include <stdio.h>
#include <stdlib.h>

/* Permettere all'utente di scegliersi le misure di un rettangolo o un quadrato con una parte interna
   e di farlo visualizzare per il numero di volte desiderato */

int main(void) {
   int x;   /* Variaible delle colonne, della parte interna e dell'ultima riga */
   int y;   /* Variaible colonna sinistra e colonna destra */
   int z;   /* Vaviabile per un altro rettangolo o quadrato */
   int a;
   int b; 
   int c;
   int d;
   
   printf("Inserisci il numero di colonne: ");
   scanf("%d", &x);
   printf("Inserisci il numero di righe: ");
   scanf("%d", &y);
   printf("Inserisci il numero di volte che vuoi visualizzare il rettanolgo o il quadrato: ");
   scanf("%d", &z);
   
for(a=x; a>0; a--){    /* Viene stampata la prima riga orizzontale (sarebbe il numero di colonne) */
   printf("+");
}
    printf("\n");
for(a=y; a>0; a--){    /* Stampa il lato sinistro */
   printf("+");
for(b=x-2; b>0; b--)   /* Stampaa la parte interna */
    printf("Q");
for(c=1; c>0; c--)     /* Stampa il lato destro */
    printf("+\n");         
}   
for(a=x; a>0; a--){   /* Stampa la prarte bassa del rettangolo (l'ultima riga) */
   printf("+");
}   
    printf("\n\n");
   
for(d=z-1; d>0; d--){  /* Ricomincia tutto da capo per il numero di votle scelto dall'utente */
if(d>0){
for(a=x; a>0; a--){
   printf("+");
}
    printf("\n");
for(a=y; a>0; a--){
   printf("+");
for(b=x-2; b>0; b--)
    printf("Q");
for(c=1; c>0; c--)
    printf("+\n");         
}   
for(a=x; a>0; a--){
   printf("+");
}
    printf("\n\n");
}
}
   
   
   return 0;
}

è scritto bene, oppure si potrebbe semplificare/sintetizzare?

Re: Questo semplice programmino si può sintetizzare?

MessaggioInviato: 27 giu 2017, 12:41
da AjeieBrazov
A prima vista ti dico che si potrebbe, innanzi tutto, scrivere meglio rispettando le indentazioni e le corrette tabulazioni.
Il resto viene dopo.

Re: Questo semplice programmino si può sintetizzare?

MessaggioInviato: 27 giu 2017, 12:43
da xyz
Di solito il termine «sintetizzare» si usa in altri linguaggi come VHDL e Verilog, per un programma in C per un computer no.

Il programma è molto semplice e si vede che è scritto da un principiante.

P.S. Contiene anche una incongruenza, non si capisce se si devono includere i caratteri del bordo oppure no:

Codice: Seleziona tutto
Inserisci il numero di colonne: 5
Inserisci il numero di righe: 6
Inserisci il numero di volte che vuoi visualizzare il rettanolgo o il quadrato: 1
+++++
+QQQ+
+QQQ+
+QQQ+
+QQQ+
+QQQ+
+QQQ+
+++++


genera un rettangolo di 5 per 8 caratteri.

Re: Questo semplice programmino si può sintetizzare?

MessaggioInviato: 27 giu 2017, 12:58
da Luigi97
Grazie per i consigli!
Comunque i "+" formerebbero la cornice... mi scuso per l'incongruenza.

-----------
Cerco un attimo di aggiustarlo.

Re: Questo semplice programmino in C si può sintetizzare?

MessaggioInviato: 27 giu 2017, 13:18
da Luigi97
Adesso dovrebbe andare un pochino meglio
Codice: Seleziona tutto
#include <stdio.h>
#include <stdlib.h>

/* Permettere all'utente di scegliersi le misure di un rettangolo o un quadrato con una parte interna
   e di farlo visualizzare per il numero di volte desiderato */

int main(void) {
   int x;   /* Variaible delle colonne, della parte interna e dell'ultima riga */
   int y;   /* Variaible colonna sinistra e colonna destra */
   int z;   /* Vaviabile per la ripetizione del rettangolo o del quadrato */
   int a;
   int b; 
   int c;
   int d;
   
   printf("Inserisci il numero di colonne: ");
   scanf("%d", &x);
   printf("Inserisci il numero di righe: ");
   scanf("%d", &y);
   printf("Inserisci il numero di volte che vuoi visualizzare il rettanolgo o il quadrato: ");
   scanf("%d", &z);
   
for(a=x+2; a>0; a--){  /* Viene stampata la prima riga orizzontale (sarebbe il numero di colonne) */
   printf("+");
}
    printf("\n");
for(a=y; a>0; a--){    /* Stampa il lato sinistro */
   printf("+");
for(b=x; b>0; b--)     /* Stampaa la parte interna */
    printf("Q");
for(c=1; c>0; c--)     /* Stampa il lato destro */
    printf("+\n");         
}   
for(a=x+2; a>0; a--){   /* Stampa la prarte bassa del rettangolo (l'ultima riga) */
   printf("+");
}   
    printf("\n\n");
   
for(d=z-1; d>0; d--){   /* Ricomincia tutto da capo per il numero di votle scelto dall'utente */
if(d>0){
for(a=x+2; a>0; a--){
   printf("+");
}
    printf("\n");
for(a=y; a>0; a--){
   printf("+");
for(b=x; b>0; b--)
    printf("Q");
for(c=1; c>0; c--)
    printf("+\n");         
}   
for(a=x+2; a>0; a--){
   printf("+");
}
    printf("\n\n");
}
}
   
   
   return 0;
}

Re: Questo semplice programmino in C si può sintetizzare?

MessaggioInviato: 27 giu 2017, 13:59
da IlGuru
Si potrebbe usare un solo ciclo for ed inserire gli acapi testando la variabile del ciclo con l'operatore modulo, una cosa tipo:
Codice: Seleziona tutto
if ( x % ( numcolonne+2 ) == 0 ) printf("\n");


Inoltre visto che non si possono stampare migliaia di righe e colonne invece che il tipo int si potrebbe usare unsigned char, un microcontrollore lo apprezzerebbe

Re: Questo semplice programmino in C si può sintetizzare?

MessaggioInviato: 27 giu 2017, 14:08
da boiler
IlGuru ha scritto:Inoltre visto che non si possono stampare migliaia di righe e colonne invece che il tipo int si potrebbe usare unsigned char, un microcontrollore lo apprezzerebbe


Se proprio vogliamo andare in questa direzione, a partire da C99 ci sono gli exact-width datatypes che hanno solo vantaggi. In questo caso sarebbe un uint8_t

char ha un nome fuorviante, dipende dall'implementazione... insomma, non facciamoci del male :mrgreen:

Boiler