PROBLEMA Esercizio Informatica In C

simokz

Nuovo Utente
4
0
HELP MEE! premetto che sono al primo anno e non sono esperto e questo problema per me è complicato.

devo stampare a video un numero dato N con degli asterischi, es. 23 si visualizzerà così:
Codice:
*   *   *   *   *   * livello 1
        *           * livello 2
*   *   *   *   *   * livello 3
*                   * livello 4
*   *   *   *   *   * livello 5
*lo spazio tra ogni numero è di 1.

il problema sta proprio nel fatto che col printf si può stampare riga per riga senza poter tornare su.
ho già completato uno step, ovvero prendere ogni cifra del numero, ora devo "soltanto" fare un ciclo per ogni cifra o meglio, secondo i miei ragionamenti, per ogni livello(riga) eseguire un for per le cifre appartenenti a un gruppo con livello di asterischi uguali (ad esempio i numeri che al primo livello hanno 3 asterischi sono: 2,3,5,6,7,8,9,0), comunque può darsi che sbagli completamente tecnica.

istruzioni che utilizzo: printf, scanf, if/else, for, while/do while.

per ogni dubbio chiedete pure, GRAZIE IN ANTICIPO :rock1:
 
Ultima modifica da un moderatore:

rodhellas

Utente Èlite
1,521
427
CPU
Ryzen 5 3600
Dissipatore
GELID Phantom
Scheda Madre
MSI B450 Gaming Plus Max
HDD
500GB m.2 + 2TB HDD
RAM
16GB Corsair LPX 3000mhz
GPU
Gigabyte GTX 960 OC
Audio
Integrata
Monitor
SyncMaster 223BW
PSU
Antec HCG-520M
Case
Meshify C
Net
Gigabit Fastweb
OS
Windows 10 64bit
ho già completato uno step, ovvero prendere ogni cifra del numero, ora devo "soltanto" fare un ciclo per ogni cifra
Io farei uno switch, in base al numero stampi tutti i caratteri ( il due sarebbe printf("***\n *\n***\n* \n***\n")). Complicarsi la vita con cicli for e if/else non ha senso, uno switch di 10 elementi magari non sarà bello da vedere ma è semplice e chiaro.
 

simokz

Nuovo Utente
4
0
Io farei uno switch, in base al numero stampi tutti i caratteri ( il due sarebbe printf("***\n *\n***\n* \n***\n")). Complicarsi la vita con cicli for e if/else non ha senso, uno switch di 10 elementi magari non sarà bello da vedere ma è semplice e chiaro.
ripeto che devo stampare RIGA PER RIGA, quindi non vale il ragionamento di disengare prima un numero e poi un'altro. poi non so se sia possibile, ma nel mio caso, dalle indicazioni del prof devo ragionare in termini di riga(livello).
sarebbe bello così:asd:
 

rodhellas

Utente Èlite
1,521
427
CPU
Ryzen 5 3600
Dissipatore
GELID Phantom
Scheda Madre
MSI B450 Gaming Plus Max
HDD
500GB m.2 + 2TB HDD
RAM
16GB Corsair LPX 3000mhz
GPU
Gigabyte GTX 960 OC
Audio
Integrata
Monitor
SyncMaster 223BW
PSU
Antec HCG-520M
Case
Meshify C
Net
Gigabit Fastweb
OS
Windows 10 64bit
Beh, se son 5 righe, fai 5 switch :lol:. Li compatti ( case 2: case 3: *** ) e in base al numero ti stampa la riga corretta
 
M

Mursey

Ospite
Beh, se son 5 righe, fai 5 switch :lol:. Li compatti ( case 2: case 3: *** ) e in base al numero ti stampa la riga corretta
Un po' grezzo come codice :rolleyes:



Sarebbe da provare questo (e' solo una bozza in pseudo-codice) :

Definire una matrice che contiene le "mappe" per disegnare i numeri, inizializzare i valori con
Codice:
num[1][1] = "001"
num[1][2] = "001"
num[1][3] = "001"
num[1][4] = "001"
num[1][5] = "001"

num[2][1] = "111"
num[2][2] = "001"
num[2][3] = "111"
num[2][4] = "100"
num[2][5] = "111"

num[3][1] = "111"
num[3][2] = "001"
num[3][3] = "111"
num[3][4] = "001"
num[3][5] = "111"

...
A questo punto
Codice:
conto le cifre
ciclo con i (da 1 a 5)
    ciclo con j (numero di cifre)
        if (num[<numero della cifra j>][i] == "0"
            stampa spazio
        else
            stampa asterisco
    vai a capo
Sono andato solo a ragionamento, sarebbe da provarlo... :boh:
 
Ultima modifica da un moderatore:

simokz

Nuovo Utente
4
0
estrarre una cifra di un numero data la posizione. tutto inserito in una funzione

es. n=145678 posizione=3 cifra scelta=5

probabilmente la funzione la devo ricavare dal programma per estrarre cifre partendo da sinistra:
C:
 int main()
  {
    int NUMERO, TOTCIFRE, CIFRA, TEMPORANEA;
    printf("Inserisci un numero: ");
    scanf("%d", &N);
    TEMPORANEA=NUMERO;
    for (TOTCIFRE=0; TEMPORANEA>=1; TOTCIFRE++)
 {
      TEMPORANEA=TEMPORANEA/10;
    }
    printf("Il numero ha %d cifre\n", TOTCIFRE);
   
    for (TOTCIFRE=TOTCIFRE-1; NUMERO>1; TOTCIFRE--)
 {
  TEMPORANEA=pow(10,TOTCIFRE);
  CIFRA=NUMERO/TEMPORANEA;
 
  NUMERO=NUMERO-(CIFRA*TEMPORANEA);
    }
    system ("PAUSE");
}
 
Ultima modifica da un moderatore:

rodhellas

Utente Èlite
1,521
427
CPU
Ryzen 5 3600
Dissipatore
GELID Phantom
Scheda Madre
MSI B450 Gaming Plus Max
HDD
500GB m.2 + 2TB HDD
RAM
16GB Corsair LPX 3000mhz
GPU
Gigabyte GTX 960 OC
Audio
Integrata
Monitor
SyncMaster 223BW
PSU
Antec HCG-520M
Case
Meshify C
Net
Gigabit Fastweb
OS
Windows 10 64bit
Hai trovato la lunghezza, io farei numero%(10^((lunghezza - posizione)+1)). Il resto lo dividi per 10^(lunghezza - posizione) e ti trovi il numero. Con ^ intendo pow, non lo xor bit a bit :ok:
 

Entra

oppure Accedi utilizzando

Hot: E3 2021, chi ti è piaciuto di più?

  • Ubisoft

    Voti: 17 18.3%
  • Gearbox

    Voti: 1 1.1%
  • Xbox & Bethesda

    Voti: 66 71.0%
  • Square Enix

    Voti: 3 3.2%
  • Capcom

    Voti: 5 5.4%
  • Nintendo

    Voti: 14 15.1%
  • Altro (Specificare)

    Voti: 8 8.6%

Discussioni Simili