LINGUAGGIO C: Triangolo rettangolo con asterischi

di Anonimizzato14638 il
8 risposte
Ciao a tutti, sto veramente impazzendo.. allora ho provato in tutti i modi a farlo ma non riesco.. ho cercato risposte nel forum ma non trovo soluzione. Spero possiate aiutarmi.
Il problema è: "Scrivere un programma che stampi a video un triangolo rettagolo di "*" la cui base e altezza siano lette da tastiera".
Io ho provato, me lo stampa, ma la base non so come inserirla nel codice. Quindi, ovviamente, stampa il triangolo di asterischi rispetto all'altezza inserita da me, ma rispetto alla base no (anche se ho messo la gets relativa). Perciò il numero di asterischi "aggiuntivi" sono "limitati" dal primo valore immesso da tastiera e la base inserita da me è come se non la richiedesse.
 #include <stdio.h>
#include <stdlib.h>

int main () 
{
    char s[80];
    int altezza, base, i, j;
    gets(s);
    altezza = atoi(s);
    gets(s);
    base = atoi(s);
   
   for(i=0; i<altezza; i++) {
   for(j=0; j<i; j++) 
   printf("*");
   printf ("*\n");
   
   }
   return 0;
}

8 Risposte

  • Per ogni riga del triangolo{
    Stampi *
    Stampi "n"-1 spazi
    Stampi *
    Stampi \n
    }

    "n" = larghezza * riga selezionata / altezza

    altezza aumenta verso il basso
  • Un ragionamento simile si può usare per ogni valore di larghezza, ma PRIMA setti un'array di [larghezza] elementi usando una formula ricavabile da quella di prima e poi usi dei cicli per stampare
  • Ma quindi devo settare per forza l'array?? perchè questo esercizio me lo propone prima dell'introduzione degli array.. come si potrebbe fare altrimenti??
  • Usa il suggerimento nella prima risposta

    Altrimenti ci sarebbero molti altri metodi più complicati che ti porterebbero allo stesso risultato...

    PS: quello nella prima istruzione è un array
  • Basta che calcoli quanti asterischi devi stampare per ogni altezza.
    ovvero ad altezza zero avrai 1 asterisco, ad altezza utente avrai x asterischi base utente.
    Ad ogni ciclo for che invochi per altezza avrai dentro prima una formula che ti calcola il numero di asterischi da stampare, poi un ciclo for che te li stampi.

    (potresti usare due variabili double per mantenere di precisione)
  • Niente, non riesco proprio! ad un certo punto ero quasi riuscita usando il primo metodo ma qualcosa era comunque sbagliata.. cioè inserendo tipo 4 e 3 (rispettivamente altezza e base) mi usciva un triangolo con 4 asterischi di altezza e poi la riga i-1 era da 3 asterischi e la quarta riga pure, non so se era giusto ma ho perso tutto...e non ricordo quello che avevo fatto (cancellando e provando in altri modi)..
  • void triangolo(int base, int altezza)
    {
    	int i, j;
    	int t;
    
    	for (i = 0; i < altezza - 1; i++)
    	{
    		printf("*");
    
    		t = base * i / altezza;
    		if (t)
    		{
    			for (j = 0; j < (t - 1); j++)
    			{
    				printf(" ");
    			}
    			printf("*");
    		}
    
    		printf("\n");
    	}
    
    	for (j = 0; j < base; j++)
    	{
    		printf("*");
    	}
    }
  • void triangolo(int base, int altezza)
    {
    
       int i, j, r;
       double step  = (double)base / (double)altezza;
       double is = 0.0;
    
       for (i = 0; i < altezza ; i++)
       {
            is += step;
            r = (is < 1) ? 1 : (int)is;
            for (j = 0; j < r ; j++)
                printf("*");
            printf("\n");
       }
    }
    
    cosi è piu preciso, se invece si vuole una "grafica" migliore si potrebbe provare ad implementare l'algoritmo per il disegno delle linee.
Devi accedere o registrarti per scrivere nel forum
8 risposte