Duda programa sencillo C

Buenas a todos, a ver si me podeis echar un cable, estoy intentando hacer un programa que me piden en las practicas de la universidad, no he visto otra seccion del foro parecida a esta, a ver como pensais que se puede hacer con la funciones incluidas en stdio.h

El ejercicio dice asi:

Escribid un programa que, dado un número entero introducido por el usuario, imprima
tantas líneas como dígitos tenga éste. En cada línea debe imprimir tantos asteriscos como
indique el dígito correspondiente. Por ejemplo, dado el valor 9734, deberá imprimir 4 líneas
con 4, 3, 7 y 9 asteriscos respectivamente.

****
***
*******
*********

Necesitaria saber, segun mi teoria, alguna funcion dentro de la libreria stdio que me diera la posicion de cada uno de los numeros o algo parecido, ¿Que opinais?

Saludos
Me parece que este no es es sitio para esto, pero te ayudo:

No tiene nada que ver con stdio
a ver con tu ejemplo:

9734
9734%10 =>> 4
9734/10=>>973
973%10=>> 3
.....

Saludos.
Vamos a ver lo que haces es lees el string con scanf y despues accedas a cada una de las posiciones y haces un atoi que te permite pasar de string a int
y luego haces un for con lo que valga cada numero e imprimes *
ssssO escribió:Vamos a ver lo que haces es lees el string con scanf y despues accedas a cada una de las posiciones y haces un atoi que te permite pasar de string a int
y luego haces un for con lo que valga cada numero e imprimes *


Recibe un entero, pasarlo a un array de caracteres simplemente para acceder a cada dígito es contraproducente y una autentica burrada.

Como dicen por arriba simplemente debes obtener el resto de la división entre 10 (con el operador %), dividir el numero entre 10 para eliminar el dígito ya utilizado y volver a repetir hasta terminar. Es tremendamente simple.
kbks escribió:Como dicen por arriba simplemente debes obtener el resto de la división entre 10 (con el operador %), dividir el numero entre 10 para eliminar el dígito ya utilizado y volver a repetir hasta terminar. Es tremendamente simple.


Lo que dices es cierto, pero existe un problemita al intentarlo solamente asi como se dice mas arriba, y es que imprimiria el numero al reves, es decir, si se tiene por ejemplo 321:
deberia imprimir:
***
**
*

pero utilizandolo como se describe mas arriba, va a imprimirlo asi:
*
**
***
lo cual no esta correcto.

Para resolver esto, desde mi punto de vista, la forma mas sencilla, sin tener que utilizar ninguna otra libreria aparte de stdio.h (como pide en la pregunta), es utilizando un vector e ir guardando el digito que se va eliminando, luego ya si puede imprimir los digitos desde el vector (en el orden correcto).

Te recomiendo que primero lo intente, con lo que se te ha dicho sobre el operador %, la division entre 10 y lo del vector deberias poder hacerlo. La verdad que conociendo estas pistas que se te han dado, con un poco de intento-error no deberias tardar ni siquiera 10 minutos (lo veo mucho tiempo) en resolver el ejercicio.

Bueno, si estas muy apurado, y lo necesitas para muy rapido, aqui esta el codigo
#include<stdio.h>

main()
{
int i,c,a[10];

clrscr();
printf("digite un numero\n");
scanf("%d",&i);

for(c=0;i>0;c++)
{
a[c]=i%10;
i=i/10;
}
for(c=c-1;c>-1;c--)
{
for(i=1;i<=a[c];i++)
printf("*");
printf("\n");
}
getch();
}

Te digo nuevamente que es mejor que primero lo intentes
4 respuestas