Duda programacion

sOyneGro

Bueno me han dejado un folio para hacer unos ejercicios y mas o menos me apaño pero ahi unos que no se porque no se me ocurre la solucion.

1º)
Me mandan construir un triangulo de la siguiente forma

1
12
123
1234...

1<=N<=9
Siendo N un numero introducido por el usuario entre los limites establecidos anteriormente.

2º) Uno que haga un triangulo asi

1
12
123
1234
12345
123456
1234567
12345678
123456789
1234567890
12345678901...

3º)

0
12
345
6789
01234
567890... Hasta una altura N del triangulo, siendo N un numero introducido por el usuario.

El caso es que estoy bastante atascado y aunque son voluntarios me gustaria hacerlos. Solo hacen falta conocimientos de bucles y de condicionales.

Nota: Estoy programando con un programa que se llama Dev C++ (tambien valen los comandos del SSH Client de UNIX) .

PD: No quiero que nadie los haga sino que me den una idea para poder resolverlo.

1 comentario moderado
KinachO

El comando for es la solucion

sOyneGro

Si ya se que hay que utilizar el for pero no se exactamente cuantos bucles hay que anidar ni como podria hacerlo.

Por ejemplo hice unos de vaciar un triangulo y era algo asi (la parte del bucle)

  for (i=1; i<=n; i++)     
     {
        for(j=1; j<=n; j++)
          {       
            if((i==n)||(j==1)||(i==j))   
                printf("*");
                else 
                   printf(" ");
          }
X3ros

Vamos repasa la teoria que es muy simple.

El primero por ejemplo, se trata de dos bucles for, el primero para el numero de filas que quieras que tenga el triangulo, y el segundo, que vaya haciendo cout de su contador y que aumente su limite en 1 con cada itineracion.

cin >> n;
c=1;
for (a=1;a<=n;a++){
    for (b=1;b<=c;b++)
        cout << b;
    
cout << endl; c++; }
KinachO

Consejo, no uses printf ni scanf, estan desfasadisimos

ReMaTxEs

Tu 2º ejercico de la forma que nos lo explicas es un bucle infinito, no creo que eso sea lo que busca tu profesor xD

sOyneGro

#6 Me obligan a usarlos, el cout y el cin de #5 me resultan totalmente desconocidos.

Gracias por tratar de ayudarme de cualquier forma.

#7 Eso me parece a mi xDD. Mira el texto exacto es este:

1
12
123
1234
12345
123456
1234567
12345678
123456789
1234567890
12345678901... para cualquier numero.

KinachO

#8 pues tu profesor esta desfasado, metele de mi parte

xD

sOyneGro

#9 Lo hare con mucho gusto jeje.

PD: ¿Que significa cout y cin? ¿Y como puedo sustituirlos por los comandos que me mandan utilizar?

ReMaTxEs

#8 Hombre en C a secas creo recordar que no iba ni el cin ni el cout

Es que eso es un puto bucle infinito y vamos, no suele ser recomendable.. Tu profesor es cuanto menos curioso, normalmente te tiran en toda la asignatura en cuanto plantas un bucle infinito en cualquier ejercicio de examen, pero el te lo pide como práctica xD

KinachO

#11 es que realmente el cin y el cout no es de c, es de c++, que es en lo que se programa mas ahora

cout es printf y cin scanf, creo recordar

sOyneGro

Osea seria algo asi

  1. scanf("%d, &n);
  2. c=1;
  3. for (a=1;a<=n;a++){
  4. for (b=1;b<=c;b++)
  5. ¿printf("%d", b);?
    6.
  6. ¿printf("%d", endl);?
  7. c++;
  8. }

Supongo que endl sera algun tipo de comando pero desconozco cual.

#11 Ya bueno es que es algo voluntario de cara a prepararse para un test, que nos van a poner en algo mas de un mes, que no es mas que un ejercicio guarro de este estilo. Pero claro me estoy partiendo la cabeza y son una autentica basurilla y claro me da verguenza plantarme con tantas dudas :$

X3ros

a ver si me acuerdo, lo que pasa que eso no lo uso si puedo pero...

scanf("i%",&n);
printf("i%",b);
printf("\n");

el i% significa entero (aunque el d% tambien vale, pero es mas facil acordarse de i% por aquello de int = entero), y el "&" lo usas en el scanf por aquello de los punteros, pero de esos ya ni hablamos aqui xD.

sOyneGro

#14 Ya bueno de los punteros tengo una muy ligera nocion xD.

dagavi

En C++

común:

#include <iostream>
using namespace std;

No tiene mayor complicación, 2 bucles

int main() {
    int x;
    cin >> x;
    for (int i = 1; i <= x; ++i) {
        for (int k = 1; k <= i; ++k) {
            cout << k;
        }
        cout << endl;
    }
}

2)

Lo mismo módulo 10 y te sale, sin mayor dificultad

int main() {
    int x;
    cin >> x;
    for (int i = 1; i <= x; ++i) {
        for (int k = 1; k <= i; ++k) {
            cout << k%10;
        }
        cout << endl;
    }
}

3)

Otra vez el mismo código per con un contador auxiliar y también módulo 10

int main() {
    int x;
    cin >> x;
    int cont = 0;
    for (int i = 1; i <= x; ++i) {
        for (int k = 1; k <= i; ++k) {
            cout << cont%10;
            ++cont;
        }
        cout << endl;
    }
}
sOyneGro

ME SALIOOOOO EL 1º!!!! Lloro de la emocion y no es broma jeje. Lo he compilado y ejecutado y va cosa fina

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

main()

{
      int n, a, b, c, i, j;
      
do{ printf("Introduzca un numero entre 1 y 9, ambos inclusive\n"); scanf("%d",&n); }while((n<1)||(n>9)); c=1; for (a=1;a<=n;a++) { for (b=1;b<=c;b++) printf("%d",b); c++; printf("\n"); }

system("pause");
}

PD: ¿Como poneis esas lineas numeradas?

Por cierto muchisimas gracias a todos :)

#16 Gracias, tratare de llevarlo "a mis conocimientos". Ya me comentaron que en industriales somos los unicos inutiles que llevamos mas de 15 años con los mismos programas y el mismo temario en programacion.

dr_Rouman

Un apunte; Lo equivalente a printf y scanf en C++ no es cin y cout, en todo caso sería << y >>.

cin y cout son sólo flujos, como stdin, stdout, stderr y demás.

Al menos eso tengo entendido XD

dagavi

El código se mete con [ code][ /code] (sin espacios)

Tu segundo ejercicio copia el código del primero y en vez de sacar el resultado b envía b%10, y ya tienes el segundo echo.

Y el tercero vuelve a copiar el código, coges una variable axiliar y sacas aux%10 e incrementas aux.

sOyneGro

#19 Lo de b%10 no lo entendi. Creo que ese comando en mi programa no me lo reconoce.

Gracias por aclararme lo de las lineas de codigo al postear :)

X3ros

juas, me sobraba una variable >.<

dagavi

#20 Si te reconoce el % puesto que es la operación matemática módulo, es decir, el resto de la división.

Al hacer módulo 10:

b%10

El módulo de la división es obvio que siempre va de 0 hasta DIVISOR - 1

Ej:
9/10 = 0 resto 9

10/10 = 1 resto 0 (no es resto 10)

Pero si de mates vas muy muy muy mal, puedes pensar que igual que un número / 10 es el mismo número sin el último digito, numero % 10 es solo el último digito

Así que puedes cambiar tu printf por:

printf("%d",b%10);

dagavi

Por cierto, si el enunciado te dice que el número está entre 1..9 no hace falta que lo protejas tanto, el programa debe de funcionar para el caso que te exigen, es decir, que el número esté entre 1..9

Lo digo por el do {} while(..)

Igualmente piensa lo que haces, fíjate la variable C tiene le mismo contenido que la variable A, ¿ves que no te hace ninguna falta?

Y lo mismo con las variables I, J, no las usas para nada (yo te borraré la A y B, que me gustan más I, J como índices, es costumbre xD)

Así te quedaría (añado consejos / explicaciones dentro del spoiler):

El primero
El segundo
El tercero

PD: Si te han dicho que lo protejas, pues no me hagas caso xDD

sOyneGro

#22 Coño lo del modulo si que lo habia hecho antes en otro ejercicio que tenia que hacer una serie y solicitar un numero par y ponia un do{ while(n%2!=0); para que volviera a solicitarlo hasta que no lo pusiera bien.
¿Pero sabes lo que ocurria? Cuando te dije que no me lo reconocia es que yo lo estaba poniendo asi:

printf("10%d", b) xDDDDD

#23 No me dicen que lo proteja, pero vamos yo soy bastante maniatico con esos detallitos.

Las variables i y j y otras que sobran las habia puesto antes con el ejercicio que lo habia hecho yo y se me olvido borrarlas, para eso ya no soy tan maniatico jeje.

Por enesima vez gracias por la ayuda.

PD: Madre mia, si fueras mujer te hechaba el polvo de tu vida en agradecimiento. No solo has puesto los programas enteros (que no hacia falta) sino que encima has puesto anotaciones para ayudar y eso es lo que mas agradezco, porque ahora ya entiendo como funciona esto.

erdanblo

Voy a intentar hacerlo en bash que tengo que practicar :D

JuAn4k4

cin es entrada estandar y cout es salida estandar, son objetos sin mas de una clase q no se como se llamara, y tienen los metodos << y >> , uno para cojer ( scan ) y otro para sacar ( print ).

PD: Si el triangulo tiene que estar centrado tendras que escribir espacios antes no ? n/2 espacios la primera vez, y luego le vas restando 1 al nº de espacios.

erdanblo

C#

            string cad = "";
            label1.Text = "";
            int cont = 1;
      
for (int i = 1; i <= Convert.ToInt32(maskedTextBox1.Text); i++) { cad += i.ToString(); label1.Text += "\n" + cad; } cad =""; // limpio para hacer la prueba con el while while (cont <= Convert.ToInt32(maskedTextBox1.Text)) { cad += cont.ToString(); label2.Text += "\n" + cad; cont++; }

En Bash:

#!/bin/bash
# - Programa que hace piramides -

cont=1;
cad="";
while [ $cont -le $1 ]; do
        cad=$cad$cont;
        echo $cad;
        let cont=$cont+1;
done

./Script.sh 5 (donde 5 es el número que quieres de la pirámide.)

Riu

ya te han contestado sobradamente el for es tu amigo y si lo anidas ya lo clavas xdd

Usuarios habituales

  • erdanblo
  • sOyneGro
  • dagavi
  • X3ros
  • dr_Rouman
  • KinachO
  • ReMaTxEs