Vai al contenuto

printf in un ciclo for [linguaggio C]


Agathos

Messaggi raccomandati

Or dunque...

nel mio manualozzo ho un problemozzo che mi stà facendo impazzire a causa della sua semplicità.

Devo creare un programma che faccia il disegno:

*

**

***

****

*****

******

*******

********

*********

**********

Condizioni del problema sono:

- utilizzare il comando di iterazione for;

- utilizzare nel ciclo la funzione printf ( "*" );

Dunque teoricamente dovrei creare un iterazione che ad ogni "giro" aggiunge un *.

Per fare questo non capisco bene se come contatore nell'intestazione di for dobbiamo mettere il numero complessivo di * oppure semplicemente il numero di righe da iterare.

Oltre a questo... l'unica variabile che possiamo dichiarare è solo il contatore, visto che non possiamo (o forse non è proprio possibile) associare * ad una variabile int tramite la funzione getchar().

Dunque come far capire che nel corso del ciclo dobbiamo aggiungere un asterisco? Il problema sembrerebbe molto simile ad uno che chiede molto semplicemente la somma degli interi pari o dispari da un numero ad un altro più grande... ma in questo caso mi imbroglia il testo.

printf ( "*" );

e come diavolo faccio senza alcuna variabile che io possa sommare? :ghghgh:

Mac Mini Core Duo 1.66 GHz

iPod Nano

RAM: 512MB

Memoria: 4GB

Hard Disk: 80GB

Colore: azzurro

Serial: YM608GJMU36

Link al commento
Condividi su altri siti

Non ho capito bene il problema... :mazzodifiori:

In effetti basterebbe usare un secondo contatore.

Una cosa tipo questa:

#include <stdio.h>

int main()
{
int numRighe; //e di conseguenza asterischi per ogni riga

printf("Quante righe? ");
scanf("%d", &numRighe);

int i = 1;
while(i<=numRighe)
{
	int n;
	for(n=0; n<i; n++)
	{
		printf("*");
	}
	printf("\n");

	i++;
}
}

Marco - Gallery

MacBook Nero 2.2 GHz Intel Core 2 Duo - 4 GB RAM - Mac OS X 10.6 Snow Leopard

Link al commento
Condividi su altri siti

/* PROGRAMMA 4.16 */

#include <stdio.h>

int main() 
{

int contatorefor;
int contatorewhile = 1;

while ( contatorewhile <= 10 ) {

		for ( contatorefor = 0; contatorefor < contatorewhile; contatorefor++ ) {

		printf ( "*" );

		} /* fine del comando for */

printf ( "\n" );
contatorewhile++;

} /* fine del comando while */

return 0;

}

Risolto mentre giocavo alla demo di skate sulla 360. :bubble::mazzodifiori:

Ad ogni modo è normale commettere molti errori prima di arrivare alla soluzione?

Mac Mini Core Duo 1.66 GHz

iPod Nano

RAM: 512MB

Memoria: 4GB

Hard Disk: 80GB

Colore: azzurro

Serial: YM608GJMU36

Link al commento
Condividi su altri siti

io avrei semplicemente usato un accumulatore ....

nn ricordo la semantica del C ma ad ogni modo avrei fatto qualcosa tipo

char star = "*";
string accumulatore = "";

for ( contatorefor = 0; contatorefor < 10; contatorefor++ ) 
{
    accumulatore += star;
    printf ( accumulatore + "\r\n" );			
}

oppure il mio C e' arruginitissimo????

Switcher since: some day in June '06

Nikon D40 + AF-S DX 18-55 G II ~ SIGMA 70-300 DG MACRO

flickr

"Solo due cose sono infinite, l'universo e la stupidità umana, e non sono sicuro della prima." (A. Einstein)

Link al commento
Condividi su altri siti

due cicli for uno dentro l'altro e risolvi il tutto....forse potrebbe essere anche solo un ciclo ma per ora non mi viene come farlo....ma dato che quando sei alla riga 1 le * è una...e quando sei alla riga due le * sono due e via dicendo...forse un ciclo solo e una variabile tampone può bastare?? anche se dubito.....io di base lo risolverei con due cicli uno nell'altro....

:ghghgh:

Balduz84

 AtSafe.it - Consulente Mac (Apple Certified Technical Coordinator 10.6)

 MacPro - Quad-Core Xeon 2.8 Ghz - 6GB DDR2 - NVIDIA GeForce GT 120 - HD 4TB

 MacBook Pro 15" - Core 2 Duo - 4GB DDR2 - SSD 120 GB Corsair

Link al commento
Condividi su altri siti

mah io rimango dell'idea dell'accumulatore ... piu semplice di cosi!

Switcher since: some day in June '06

Nikon D40 + AF-S DX 18-55 G II ~ SIGMA 70-300 DG MACRO

flickr

"Solo due cose sono infinite, l'universo e la stupidità umana, e non sono sicuro della prima." (A. Einstein)

Link al commento
Condividi su altri siti

mah io rimango dell'idea dell'accumulatore ... piu semplice di cosi!

A parte il C arruginito l'idea dell'accumulatore ci sta bene. Certo le operazioni su stringhe non sono le più banali in C... ma una strcat(accumulatore, "*") fa al caso nostro:

#include <stdio.h>
#include <string.h>
#include <stdlib.h>

int main(int argc, char **argv){
int ln = 0, int i=0;
       char *acc = NULL; // l'accumulatore

printf("Quante righe? ");
scanf("%d", &ln);

for(i=0; i<=ln; i++){
	acc = (char *) realloc((i+1)*sizefof(char)); // ci vuole lo spazio anche per il newline
	strcat(acc, "*");
	printf("%s", acc);
}
       free(acc);
       return 0;
}

Sicuramente c'è qualche errore, correggibile però con le man pages e un gcc/gdb. Notare che andrebbero aggiunti un pò di controlli di errore...

Wii code: 0734 3828 1483 3595

Mii name: BlackICE

Link al commento
Condividi su altri siti

bhe si ... il mio codice era piu una pseudo codifica! :D

Switcher since: some day in June '06

Nikon D40 + AF-S DX 18-55 G II ~ SIGMA 70-300 DG MACRO

flickr

"Solo due cose sono infinite, l'universo e la stupidità umana, e non sono sicuro della prima." (A. Einstein)

Link al commento
Condividi su altri siti

Archiviato

Questa discussione è archiviata e chiusa a future risposte.

×
×
  • Crea Nuovo...