Domanda Risolto Esercizi di programmazzone

Davide27

Utente Bronze
4 Marzo 2022
40
19
1
25
salve a tutti, sono un studente di un istituto tecnico e il mio prof di sistemi mi assegna sempre esercizi del tipo: stampa un quadrato con N righe e N colonne con il valore N acquisito precedentemente o esercizi simili a questo. Qualcuno sa dirmi qualche "trucco" per riuscire a fare questi esercizi? grazie
 
In generale esistono sempre API che fanno proprio quello che ti serve (soprattutto per funzioni logiche semplici). In altri casi, come anche il tuo, potresti anche utilizzare strutture dati come array bidimensionali (matrici) che gestiscono già dalla dichiarazione quello che intendi te.
 
In generale esistono sempre API che fanno proprio quello che ti serve (soprattutto per funzioni logiche semplici). In altri casi, come anche il tuo, potresti anche utilizzare strutture dati come array bidimensionali (matrici) che gestiscono già dalla dichiarazione quello che intendi te.
per caso c'è qualche guida che spiega come usare le matrici nel mio caso?
 
per caso c'è qualche guida che spiega come usare le matrici nel mio caso?

Basta cercare "array in C" o in qualsiasi altro linguaggio. Anche se il tuo caso specifico non ha bisogno di nessuna struttura permanente (potresti risolverla con una serie di printf se te la vuoi visualizzare).

C:
#include <stdio.h>

int main(){

    int n;
    printf("Dammi il valore N:");
    scanf(" %d", &n);
    printf("Il quadrato sarà di %d unità\n", n);
    int q [n][n];

    for(int i = 0; i < n; i++){
        printf("\n");
        for(int j = 0; j < n; j++){
            q[i][j] = 0; // l'array è inutile, era giusto per farti capire come si presentava in C.
            printf("$ ");
        }
    }
    return 0;
}

Output:
Codice:
Dammi il valore N:10
I quadrato sarà di 10 unità

$ $ $ $ $ $ $ $ $ $
$ $ $ $ $ $ $ $ $ $
$ $ $ $ $ $ $ $ $ $
$ $ $ $ $ $ $ $ $ $
$ $ $ $ $ $ $ $ $ $
$ $ $ $ $ $ $ $ $ $
$ $ $ $ $ $ $ $ $ $
$ $ $ $ $ $ $ $ $ $
$ $ $ $ $ $ $ $ $ $
$ $ $ $ $ $ $ $ $ $ %
 
  • Mi piace
Reazioni: Davide27
Non ci sono trucchi particolari, ma puoi provare a disegnarlo su carta per aiutarti ad individuare un pattern:
Codice:
N = 6 contiamo a partire da 0

 | 012345
-+-------
0| ******
1| *    *
2| *    *
3| *    *
4| *    *
5| ******
Quando stai stampando un asterisco? Nella prima riga, nell'ultima riga, nella prima colonna e nell'ultima colonna.
Quando stai stampando spazio? In tutti gli altri casi.
Codice:
if (row == 0 || row == 0 || col == N-1 || col == N-1) putc('*');
else putc(' ');
Dopodiché segui il pattern standard per stampare una matrice:
Codice:
for (row = 0; row < N; row++) {
    for (col = 0; col < N; col++) {
       // stampa cella
    }
    putc('\n');
}
Infine, metti assieme le due cose.

Se vuoi stampare un + il ragionamento è praticamente identico solo che al posto di essere la prima e l'ultima riga/colonna è semplicemente quella al centro. Se vuoi stampare una \ noterai che l'asterisco lo stampi solo quando la riga è uguale alla colonna. Se vuoi stampare una / (dall'altro verso) il discorso è speculare rispetto al precedente: prima riga e ultima colonna, seconda riga e penultima colonna, terza riga e terzultima colonna, etc... Se vuoi stampare una X combini il ragionamento che hai fatto nei due precedenti. Se vuoi stampare un triangolo rettangolo noterai che il numero di asterischi dipende dalla riga in cui ti trovi e le colonne non sono più importanti. E via dicendo per altre figure.
 
  • Mi piace
Reazioni: Kode e Davide27
Ultima modifica:
Basta cercare "array in C" o in qualsiasi altro linguaggio. Anche se il tuo caso specifico non ha bisogno di nessuna struttura permanente (potresti risolverla con una serie di printf se te la vuoi visualizzare).

C:
#include <stdio.h>

int main(){

    int n;
    printf("Dammi il valore N:");
    scanf(" %d", &n);
    printf("Il quadrato sarà di %d unità\n", n);
    int q [n][n];

    for(int i = 0; i < n; i++){
        printf("\n");
        for(int j = 0; j < n; j++){
            q[i][j] = 0; // l'array è inutile, era giusto per farti capire come si presentava in C.
            printf("$ ");
        }
    }
    return 0;
}

Output:
Codice:
Dammi il valore N:10
I quadrato sarà di 10 unità

$ $ $ $ $ $ $ $ $ $
$ $ $ $ $ $ $ $ $ $
$ $ $ $ $ $ $ $ $ $
$ $ $ $ $ $ $ $ $ $
$ $ $ $ $ $ $ $ $ $
$ $ $ $ $ $ $ $ $ $
$ $ $ $ $ $ $ $ $ $
$ $ $ $ $ $ $ $ $ $
$ $ $ $ $ $ $ $ $ $
$ $ $ $ $ $ $ $ $ $ %
grazie mille! :)
Messaggio unito automaticamente:

Basta cercare "array in C" o in qualsiasi altro linguaggio. Anche se il tuo caso specifico non ha bisogno di nessuna struttura permanente (potresti risolverla con una serie di printf se te la vuoi visualizzare).

C:
#include <stdio.h>

int main(){

    int n;
    printf("Dammi il valore N:");
    scanf(" %d", &n);
    printf("Il quadrato sarà di %d unità\n", n);
    int q [n][n];

    for(int i = 0; i < n; i++){
        printf("\n");
        for(int j = 0; j < n; j++){
            q[i][j] = 0; // l'array è inutile, era giusto per farti capire come si presentava in C.
            printf("$ ");
        }
    }
    return 0;
}

Output:
Codice:
Dammi il valore N:10
I quadrato sarà di 10 unità

$ $ $ $ $ $ $ $ $ $
$ $ $ $ $ $ $ $ $ $
$ $ $ $ $ $ $ $ $ $
$ $ $ $ $ $ $ $ $ $
$ $ $ $ $ $ $ $ $ $
$ $ $ $ $ $ $ $ $ $
$ $ $ $ $ $ $ $ $ $
$ $ $ $ $ $ $ $ $ $
$ $ $ $ $ $ $ $ $ $
$ $ $ $ $ $ $ $ $ $ %
ho provato a fare una tabella che stampa (in output deve dare questo:
es: N=5:
10000
02000
00300
00040
00005


però se scrivo il codice su Xcode sul Mac e uso la matrice mi dice questo:

Schermata 2022-03-05 alle 08.35.46.png


per caso sai dirmi come mai? grazie mille!
 
  • Mi piace
Reazioni: Kode
grazie mille! :)
Messaggio unito automaticamente:


ho provato a fare una tabella che stampa (in output deve dare questo:
es: N=5:
10000
02000
00300
00040
00005


però se scrivo il codice su Xcode sul Mac e uso la matrice mi dice questo:

Visualizza allegato 60787

per caso sai dirmi come mai? grazie mille!
Hai dichiarato una matrice ma non la utilizzi mai, ossia non effettui mai nè l'inizializzazione nè l'accesso ai dati al suo interno. Quello che vedi è un warning. I warning si differenziano dagli errori perchè non causano problemi logici al programma in esecuzione (errori runtime) oppure a livello sintattico (errore a livello di compilazione). In altre parole, puoi anche ignorarlo, ma dato che non lo utilizzi, puoi anche cancellarlo e vedrai che non avrà alcun effetto sull'output.