Autor Tema: Tabla de multiplicar C

0 Usuarios y 1 Visitante están viendo este tema.

15 Julio, 2015, 04:55 pm
Leído 4869 veces

Estudiantee

  • Aprendiz
  • Mensajes: 423
  • Karma: +0/-0
  • Sexo: Masculino
Sé hacer el problema en el main sin modulares, ahora bien quiero aprender a hacerlo con modulares. Este es el programa pero solo me sale 100 al compilar.
#include<stdio.h>
#include<stdlib.h>
#include<math.h>
   int multiplos(int r){
   int i;
   for(i=1;i<=20;i++){
   r=5*i;
   }
   for(i=1;i<=20;i++){

    return(r);
   }




   }





   int main(void){
   int r,i;
   printf("%d\n",multiplos(r));



   system("pause");
   return(0);

   }
 
Si alguien me invita a forocoches, se lo agradecería.

15 Julio, 2015, 06:19 pm
Respuesta #1

ingmarov

  • Moderador Global
  • Mensajes: 4,627
  • País: hn
  • Karma: +0/-0
  • Sexo: Masculino
Hola

Veo varios problemas

En la función principal declaras la variable "i" y nunca la usas.

Nunca asignas un valor a "r". ¿O sí? yo no lo veo.
En el módulo

Quieres que el módulo retorne varios valores y creo que solo podrá retornar un valor.
Puedes hacer varias cosas
Poner el segundo ciclo for en la función principal y que allí se llame a la función modular cuantas veces quieras.
O puedes hacer que la función multiplos imprima lo que quieras.
No te confíes, revisa lo que escribo. Yo también me equivoco.
Odio el autocorrector de Android...

16 Julio, 2015, 11:48 am
Respuesta #2

Estudiantee

  • Aprendiz
  • Mensajes: 423
  • Karma: +0/-0
  • Sexo: Masculino
     He intentado lo que me has explicado, pero sigue sin salirme.
Si alguien me invita a forocoches, se lo agradecería.

16 Julio, 2015, 03:44 pm
Respuesta #3

ingmarov

  • Moderador Global
  • Mensajes: 4,627
  • País: hn
  • Karma: +0/-0
  • Sexo: Masculino
Mira ese programa hecho en python (tablas de multilicar del 1 al 12)

Código: [Seleccionar]
def multi(n):                                           %Esta es la función secundaria
for i in range(10):                            %Este ciclo for es similar al tuyo solo que este asigna valores a i desde cero a "diez"   
print(n,"x",i+1,"=",n*(i+1))

for j in range(12):         %Esta la función principal
multi(j+1)


Y la salida del programa
Spoiler
Código: [Seleccionar]
1 x 1 = 1
1 x 2 = 2
1 x 3 = 3
1 x 4 = 4
1 x 5 = 5
1 x 6 = 6
1 x 7 = 7
1 x 8 = 8
1 x 9 = 9
1 x 10 = 10
2 x 1 = 2
2 x 2 = 4
2 x 3 = 6
2 x 4 = 8
2 x 5 = 10
2 x 6 = 12
2 x 7 = 14
2 x 8 = 16
2 x 9 = 18
2 x 10 = 20
3 x 1 = 3
3 x 2 = 6
3 x 3 = 9
3 x 4 = 12
3 x 5 = 15
3 x 6 = 18
3 x 7 = 21
3 x 8 = 24
3 x 9 = 27
3 x 10 = 30
4 x 1 = 4
4 x 2 = 8
4 x 3 = 12
4 x 4 = 16
4 x 5 = 20
4 x 6 = 24
4 x 7 = 28
4 x 8 = 32
4 x 9 = 36
4 x 10 = 40
5 x 1 = 5
5 x 2 = 10
5 x 3 = 15
5 x 4 = 20
5 x 5 = 25
5 x 6 = 30
5 x 7 = 35
5 x 8 = 40
5 x 9 = 45
5 x 10 = 50
6 x 1 = 6
6 x 2 = 12
6 x 3 = 18
6 x 4 = 24
6 x 5 = 30
6 x 6 = 36
6 x 7 = 42
6 x 8 = 48
6 x 9 = 54
6 x 10 = 60
7 x 1 = 7
7 x 2 = 14
7 x 3 = 21
7 x 4 = 28
7 x 5 = 35
7 x 6 = 42
7 x 7 = 49
7 x 8 = 56
7 x 9 = 63
7 x 10 = 70
8 x 1 = 8
8 x 2 = 16
8 x 3 = 24
8 x 4 = 32
8 x 5 = 40
8 x 6 = 48
8 x 7 = 56
8 x 8 = 64
8 x 9 = 72
8 x 10 = 80
9 x 1 = 9
9 x 2 = 18
9 x 3 = 27
9 x 4 = 36
9 x 5 = 45
9 x 6 = 54
9 x 7 = 63
9 x 8 = 72
9 x 9 = 81
9 x 10 = 90
10 x 1 = 10
10 x 2 = 20
10 x 3 = 30
10 x 4 = 40
10 x 5 = 50
10 x 6 = 60
10 x 7 = 70
10 x 8 = 80
10 x 9 = 90
10 x 10 = 100
11 x 1 = 11
11 x 2 = 22
11 x 3 = 33
11 x 4 = 44
11 x 5 = 55
11 x 6 = 66
11 x 7 = 77
11 x 8 = 88
11 x 9 = 99
11 x 10 = 110
12 x 1 = 12
12 x 2 = 24
12 x 3 = 36
12 x 4 = 48
12 x 5 = 60
12 x 6 = 72
12 x 7 = 84
12 x 8 = 96
12 x 9 = 108
12 x 10 = 120
[cerrar]

Revísalo, leer python es fácil.
No te confíes, revisa lo que escribo. Yo también me equivoco.
Odio el autocorrector de Android...

16 Julio, 2015, 04:12 pm
Respuesta #4

luis

  • Aprendiz
  • Mensajes: 304
  • Karma: +1/-0
  • Sexo: Masculino
¿sabes lo que hace el return? devuelve el valor, y corta la ejecución. al ponerlo dentro de una iteración estás, en cierto sentido, destruyendo la iteración.


17 Julio, 2015, 04:18 pm
Respuesta #5

Estudiantee

  • Aprendiz
  • Mensajes: 423
  • Karma: +0/-0
  • Sexo: Masculino
Pero si quito el return no me va a devolver nada. Lo que quiero es que me devuelva los 10 valores.
Si alguien me invita a forocoches, se lo agradecería.

17 Julio, 2015, 04:24 pm
Respuesta #6

luis

  • Aprendiz
  • Mensajes: 304
  • Karma: +1/-0
  • Sexo: Masculino
Pero si quito el return no me va a devolver nada. Lo que quiero es que me devuelva los 10 valores.

Una función (digamos, pirulo()) comienza a ejecutarse cuando la invocás (ponés en alguna parte de tu texto "pirulo()"), y al encontrar un return devuelve algo, y termina de ejecutarse. es decir, solamente se ejecuta una vez. al ponerlo adentro de una iteración, solamente se ejecuta la primera iteración en forma parcial.

luis

17 Julio, 2015, 04:53 pm
Respuesta #7

Estudiantee

  • Aprendiz
  • Mensajes: 423
  • Karma: +0/-0
  • Sexo: Masculino
Entonces hago que la función no devuelva nada y la llamo mediante un bucle for para que me devuelva 10 valores?
Si alguien me invita a forocoches, se lo agradecería.

17 Julio, 2015, 04:57 pm
Respuesta #8

ingmarov

  • Moderador Global
  • Mensajes: 4,627
  • País: hn
  • Karma: +0/-0
  • Sexo: Masculino
Entonces hago que la funcion no devuelva nada y la llamo mediante un bucle for para que me devuelva 10 valores?

Si devuelve nada (si es tipo void) ¿cómo te devolverá 10 valores?

Llámala con un ciclo "for"  de diez pasos desde la función principal y que en cada llamada te devuelva un valor




Pd. Cuida los tildes, también aplica para mí, a veces también me olvido a alguno.
No te confíes, revisa lo que escribo. Yo también me equivoco.
Odio el autocorrector de Android...

17 Julio, 2015, 05:10 pm
Respuesta #9

Estudiantee

  • Aprendiz
  • Mensajes: 423
  • Karma: +0/-0
  • Sexo: Masculino
Crees que este ejercicio se puede hacer con funciones?



Procura en adelante no borrar todo tu mensaje, ponlo en un spoiler si quieres pero no lo borres.
Si alguien me invita a forocoches, se lo agradecería.

17 Julio, 2015, 05:24 pm
Respuesta #10

ingmarov

  • Moderador Global
  • Mensajes: 4,627
  • País: hn
  • Karma: +0/-0
  • Sexo: Masculino
Te comento el programa

Lo estoy intentando, he pensado hacerlo así, pero no da resultado:
 int multiplos(int r){
   int i;
   for(i=1;i<=20;i++){                /*Este ciclo for asigna a r los valores 5,10,15,...,95,100     pero no devuelve cada uno, no entiendo lo que quieres hacer. /*
   r=5*i;
   }
   for(i=1;i<=20;i++) return(r);  /*Solo devuelve el último valor de r (r=100), una vez y luego vuelve a la función principal/*
   }










   int main(void){
   int r,i;
   for(i=1;i<=20;i++){             /*Esto sí puede servir, pero con lo que tienes en la función múltiplos creo que solo obtienes 100,100,100,... (20 cienes)/*
   printf("%d\n",multiplos(r));
   }


   system("pause");
   return(0);

   }
 


¿Puede mostrarme el tipo de salida que buscas en este programa?

Me deja pensando la linea   donde escribes   r=5*i



El programa es bastante fácil, y sí se puede hacer con funciones. Pero debo entender ¿qué quieres hacer con el programa?

 Quiero decir ¿Que quieres que el programa haga?
No te confíes, revisa lo que escribo. Yo también me equivoco.
Odio el autocorrector de Android...

17 Julio, 2015, 05:59 pm
Respuesta #11

Estudiantee

  • Aprendiz
  • Mensajes: 423
  • Karma: +0/-0
  • Sexo: Masculino
Quiero que el programa me muestre los primeros 20 múltiplos de 5. (Y sí me sale 100 20 veces).
Si alguien me invita a forocoches, se lo agradecería.

17 Julio, 2015, 06:10 pm
Respuesta #12

pierrot

  • pabloN
  • Moderador Global
  • Mensajes: 3,392
  • País: uy
  • Karma: +0/-0
  • Sexo: Masculino
Quiero que el programa me muestre los primeros 20 múltiplos de 5.

En Perl, un posible one-liner para hacer esa tarea sería éste:

$ perl -e 'print join"\n", map 5*$_,1..20'

o también:

$ perl -e 'print 5*$_,"\n" for 1..20'
$_="loe  hnachaPkr erttes,urJ";$j=0;for($i=0;s/(.)(.{$j})$//;$i++){$_=$2.$_,$j+=1-$i%2,print$1}print

17 Julio, 2015, 06:20 pm
Respuesta #13

ingmarov

  • Moderador Global
  • Mensajes: 4,627
  • País: hn
  • Karma: +0/-0
  • Sexo: Masculino
¿Te han enseñado a hacer pruebas de escritorio? si no investiga

Prueba el programa siguiente, es una forma de hacerlo.


#include<stdio.h>
#include<stdlib.h>
#include<math.h>
  void multiplos(int r){
   int i, int n;
   for(i=1;i<=20;i++){
   n=r*i;
      printf("%d\n",n);
    }
return(0);
 }
  int main(void){
   int r=5;
 
   multiplos(r);

   system("pause");
   return(0);

   }
 
Ah tienes razón Estudiante, había olvidado el return de la función.
No te confíes, revisa lo que escribo. Yo también me equivoco.
Odio el autocorrector de Android...

17 Julio, 2015, 06:26 pm
Respuesta #14

Estudiantee

  • Aprendiz
  • Mensajes: 423
  • Karma: +0/-0
  • Sexo: Masculino
 ¿por qué no pones return?
Si alguien me invita a forocoches, se lo agradecería.

17 Julio, 2015, 07:12 pm
Respuesta #15

ingmarov

  • Moderador Global
  • Mensajes: 4,627
  • País: hn
  • Karma: +0/-0
  • Sexo: Masculino
¿por qué no pones return?

Sí, tienes razón, ya lo he editado.
No te confíes, revisa lo que escribo. Yo también me equivoco.
Odio el autocorrector de Android...

17 Julio, 2015, 08:20 pm
Respuesta #16

argentinator

  • Consultar la FIRMAPEDIA
  • Administrador
  • Mensajes: 7,292
  • País: ar
  • Karma: +0/-0
  • Sexo: Masculino
  • Vean mis posts activos en mi página personal
    • Mis posts activos (click aquí)


  Pero debo entender ¿qué quieres hacer con el programa?

 Quiero decir ¿Que quieres que el programa haga?

Más aún, yo diría que expresar esto es la parte más importante de un programa.
Esto puede hacerse en el mismo programa, usando comentarios, por ejemplo:


  // Este programa imprime una tabla de multiplicar.

  // Entrada: Números r, n.
  // Salida:   Por pantalla: mostrar la tabla de multiplicar de números hasta r filas y n columnas.
  // Método: Subrutina (o función void), iteraciones con for, uso de printf().

  int main(void)
  {
     //  ........................
  }