ayuda con programa en c

Buenas tardes a todos,

Tengo que realizar un programa en C, que segun el caracter que introduzcas dibuje un triangulo o un rombo. Ademas, tambien tiene en cuenta un numero de filas y un desplazamiento respecto al margen izquierdo de la consola. Ando un poco liado y no consigo mucho de momento. Decir tambien que mi nivel en C es bajo. Esto es lo que llevo de codigo:

#include <stdio.h>

int main (void)
{
int filas;
int desplazamiento;
int e = 0; //contador de espacios
int f = 0; //contador de filas
char caracter;

printf (stdout, "Introduzca un caracter para dibujar una figura:");
scanf (stdin, "%c", &caracter);
fflush (stdin);

if (caracter >= "a" || caracter <= "z")
{
printf (stdout, "Introduzca el numero de filas [1-15]:");
scanf (stdin, "%d", &filas);
fflush (stdin);

printf (stdout, "Introduzca el espacio [1-20]:");
scanf (stdin, "%d", &desplazamiento);
fflush (stdin);

for (filas >= 1 || f <= filas; f++)
{
do
caracter = caracter + 2;
printf (stdout, "%c", caracter);
while (f <= filas);
}
}
return 0;
}


Si me podeis echar una mano os estare muy agradecido.
Entiendo que en modo consola usando caracteres.

Es muy sencillo y no te lo voy a dar comido, porque el principal problema es aprender a pensar como solucionar problemas de este tipo, no el problema en si mismo. Así que mi sugerencia es que nos expliques, con palabras, como se formaría el triangulo. Sin usar ningún lenguaje de programación.

Si te ayuda, haz una cuadrícula y marca primero los puntos en los que debería ir el contorno del triangulo.
Una vez lo tengas, el rombo es repetir la otra mitad invertida.
Si, si eso es lo que me han explicado, que empiece primero por el triangulo. Efectivamente es en modo consola usando caracteres. El triangulo se formaria dibujando linea por linea, es decir empieza con un caracter, despues en la siguiente linea se le añaden otros dos al que ya hay y asi sucesivamente hasta alcanzar el numero de lineas.

Quizas aqui es donde me haga mas lio, porque no se como traducir eso a codigo. Me han explicado que lo tengo que hacer con unos for anidados. Yo intento empezar por lo mas sencillo como dices, primero me planteo como seria fuera del codigo, pero luego a la hora de pasarlo es donde tengo las dificultades. No se tampoco si estara bien como creo que se forma el triangulo.

Gracias por adelantado.
Paso a paso. Olvídate de código hasta que tengas la idea clara.

Primero, en la primera línea dónde situarías el primer carácter. En el centro, no? Para saber el centro empezando por la punta tienes que saber cuántos caracteres tienen que haber por linea. Espacios en blanco, como asteriscos (o el carácter que emplees para dibujar el triángulo)

Si ya sabes esa cantidad de caracteres por línea, escribe espacios HASTA la posición media, (y, por que no, tras éste, continua escribiendo espacios hasta llegar al tope de caracteres por línea).

Línea dos... si está en una posición determinada el de la primera línea, un asterisco tendrá que ir antes, espacios, y otro asterisco espejado, no? Pues lo mismo hacia la derecha.

Y vas haciendo líneas.


Sí, puedes hacerlo con un par de for anidados. De echo puedes plantearlo como una cuadrícula en la que se pinta o no. No deja de ser una matriz de dos dimensiones.
Como no se lo que has dado y lo que no, prefiero no decirte nada más. Éste, como casi todo en programación, se puede hacer de diversas maneras.
Muchas gracias por la respuesta rintin. La verdad que me has ayudado a verlo de otra manera con esa explicacion. Voy a ponerme a ello a ver que tal. Un saludo.

EDITO: Despues de esto ultimo que me has explicado, he hecho avances, pero solo consigo que se vea la mitad del triangulo. El desplazamiento me funciona bien.

#include <stdio.h>

int main (void)
{
int filas;
int desplazamiento;
int e; //contador de espacios
int f; //contador de filas
int c; //contador de columnas
char caracter;

printf ("Introduzca un caracter para dibujar una figura:");
scanf ("%c", &caracter);
fflush (stdin);

if (caracter >= 48 && caracter <= 57)
{
printf ("Introduzca el numero de filas [1-15]:");
scanf ("%d", &filas);
fflush (stdin);

printf ("Introduzca el espacio [1-20]:");
scanf ("%d", &desplazamiento);
fflush (stdin);

for (f = 0; f <= filas; f++)
{
for (e = 0; e <= desplazamiento; e++)
{
printf (" ");
}
for (c = 0; c < f; c++)
{
printf ("%c", caracter);
}
printf ("\n");
}

}

else
{
}

system ("pause");
return 0;
}
Te voy a hacer un par de comentarios respecto a tu forma de programar, solo para que las tengas claras, un par de consejos que no sé si es que se ha copiado mal por el formato de texto o es que no lo usas.
Solo tres cositas:
-Puede que no se vea porque ha usado la etiqueta spoiler sin la etiqueta code, en tal caso te recomiendo que las combines. Si es por eso, perfecto. En caso contrario identa las funciones, usa ya sea el tabulador o los espacios (yo uso 3 en mi caso)
-Si la función sólo va a ejecutar la siguiente linea, las llaves no son necesarias.
-No uses el system pause, con el return 0 basta.

El codigo queda así:
#include <stdio.h>

int main (void) {
   int filas;
   int desplazamiento;
   int e; //contador de espacios
   int f; //contador de filas
   int c; //contador de columnas
   char caracter;

   printf ("Introduzca un caracter para dibujar una figura:");
   scanf ("%c", &caracter);
   fflush (stdin);

   if (caracter >= 48 && caracter <= 57){
      printf ("Introduzca el numero de filas [1-15]:");
      scanf ("%d", &filas);
      fflush (stdin);

      printf ("Introduzca el espacio [1-20]:");
      scanf ("%d", &desplazamiento);
      fflush (stdin);

      for (f = 0; f <  filas; f++){
         for (e = 0; e < desplazamiento; e++)
             printf (" ");
         for (c = 0; c < f; c++)
             printf ("%c", caracter);
         printf ("\n");
         }
      }   
    else{}
    return 0;
}


Te diría que si lo que te hace es medio triangulo tu problema está en el tercer bucle, en la condición, en ese "<f" no deberías usar f como pivote si el triangulo va a ser doble
Gracias por responder.

Efectivamente solo habia usado el spoiler y no lo de code. Tambien tienes razon con lo de las llaves, aunque mas que nada las pongo como para estructurarlo y se vea claro.

Como tu dices el problema esta en el tercer bucle, eso mas o menos lo tenia claro, pero no consigo orientarme por asi decirlo sobre donde pivotar como tu dices.

He pensado en introducir una nueva variable para las columnas trabajar con ella en el tercer bucle.

Voy a ponerme a ello. Un saludo y muchas gracias!
6 respuestas