Página 1 de 2
Tablas de multiplicar (lenguaje C)
Publicado: 09 Jul 2014, 20:57
por Pino1952
Hola a todos.
El programa que pongo a continuación compila sin errores en Pelles C, pero compilando en línea de comando con gcc como siempre no deja declarar las variables si no es al principio, tiene esto alguna solución, será que el compilador de gcc es antiguo (creo tener la última versión), por las dudas estoy estudiando punteros y el próximo capítulo es memoria dinámica.-
#include <stdio.h>
int main(void){
int i=0, tabla=0, limite=0;
printf("\n ===== Programa que muestra la tabla de multiplicar =====");
printf("\n\n %c Que tabla desea consultar ?......:", 168);
scanf("%d", &tabla);
printf("\n Ingrese el m%cximo de operaciones...:", 160);
scanf("%d", &limite);
int _limite[limite];
for(; i<limite; i++){
*(_limite+i) = i*tabla;
}
for(i=0; i<limite; i++){
printf("\n %2d x %2d = %2d", tabla, i, *(_limite+i));
}
printf("\n\n");
return 0;
}
Desde ya muchas gracias por la ayuda que puedan ofrecerme.-
Saludos.
Daniel
Re: Tablas de multiplicar (lenguaje C)
Publicado: 09 Jul 2014, 23:58
por Baal_30
Con límite te refieres hasta que número va a multiplicar ¿? (10 como se suele poner) ¿?
Hombre, yo lo que haría, sería con un "for" anidade en otro "for", lo de los punteros que utilizas la verdad es que yo no le encuentro la utilidad, igual que el array de enteros... Que alguien me lo explique, y corrija en lo que me equivoque.
//Tampoco entiendo el "168" y "160" en los printf :/
Un saludo ¡!
Re: Tablas de multiplicar (lenguaje C)
Publicado: 10 Jul 2014, 16:40
por Pink
Lo que pasa es que no puedes hacer esto int _limite[limite];
para ello deberías declararlo dinamicamente y reservarlo malloc o calloc.
#include <stdio.h>
#include <stdlib.h>
int main()
{
int i=0, tabla=0, limite=0;
int * _limite=NULL;
printf("\n ===== Programa que muestra la tabla de multiplicar =====");
printf("\n\n %c Que tabla desea consultar ?......:", 168);
scanf("%d", &tabla);
printf("\n Ingrese el m%cximo de operaciones...:", 160);
scanf("%d", &limite);
_limite=malloc(limite*sizeof(int));
for(; i<limite; i++){
*(_limite+i) = i*tabla;
}
for(i=0; i<limite; i++){
printf("\n %2d x %2d = %2d", tabla, i, *(_limite+i));
}
free(_limite);
printf("\n\n");
return 0;
}
Saludos
Re: Tablas de multiplicar (lenguaje C)
Publicado: 10 Jul 2014, 20:51
por Pino1952
Hola Baal_30
En cuanto al límite es correcta tu apreciación sólo que quiero que se ingrese por teclado.-
El array de enteros es para practicar y que los resultados no sólo salgan por la consola si no que queden guardados en el memoria.-
El 168 y 160 con los códigos ascii del signo de pregunta y la a acentuada.-
Tocayo, gracias por la ayuda, leí por allí que al compilar si le agrego "-std=c99" es la solución, voy a practicarlo.-
Saludos.
Daniel
Re: Tablas de multiplicar (lenguaje C)
Publicado: 10 Jul 2014, 21:12
por Baal_30
Okey, gracias por las aclaraciones Pino1952
Re: Tablas de multiplicar (lenguaje C)
Publicado: 11 Jul 2014, 16:18
por Pink
Igual no puedes hacer esto:int _limite[limite];
para hacer eso deberias tener limite declarado antes de compilar.
usar constates.
Saludos
Re: Tablas de multiplicar (lenguaje C)
Publicado: 11 Jul 2014, 17:55
por Pino1952
Hola Daniel.
Si te réferis a un #define no lo hago por 2 cosas, en primer lugar como se lo aclaré a Baal_30 quiero que el límite se ingrese por teclado y además no veo la necesidad dado que no me compila porque tengo una versión antigua de gcc(cosa que acabo de descubrir), en Pelles C el programa funciona correctamente.-
Saludos.
Daniel
Re: Tablas de multiplicar (lenguaje C)
Publicado: 11 Jul 2014, 18:54
por Pink
Ni en la versión mas nueva de GCC o visual estudio te va a compilar asi nt _limite[limite] :S
si limite no es constante.
Saludos
Re: Tablas de multiplicar (lenguaje C)
Publicado: 11 Jul 2014, 19:32
por Pink
Una opción seria definirlo así int _limite[100]; ahi ya reservas el limite. entonces puedes imprimirlos mientras limite no sea mayor de 100.
Saludos
Re: Tablas de multiplicar (lenguaje C)
Publicado: 12 Jul 2014, 02:45
por Pino1952
Hola Dani.
¿Vos corriste el programa?, te pregunto esto porque a mí me funciona perfectamente.-
Saludos.
Daniel
Re: Tablas de multiplicar (lenguaje C)
Publicado: 12 Jul 2014, 19:42
por Pink
No importa si corre o no. esta malo.
El compilador debe conocer el tamaño de array para reservarlo. tu código esta escribiendo/leyendo donde no debería.
deberías reservar antes. o usar memoria dinámica.
PD: como sabes que soy Daniel :)
Saludos
Re: Tablas de multiplicar (lenguaje C)
Publicado: 12 Jul 2014, 21:35
por Pino1952
Hola Dani.
En cuanto a tú teoría me desconcierta me voy a documentar.-
Saludos.
Daniel
Re: Tablas de multiplicar (lenguaje C)
Publicado: 12 Jul 2014, 23:09
por strup
Pino1952 escribió:Hola Dani.
En cuanto a tú teoría me desconcierta me voy a documentar.-
Saludos.
Daniel
Hace tiempo que no toco C pero si se a lo que se refiere pink, si te fijas en el codigo de pink reserva espacio dinamicamente con malloc dando un espacio de multiplicar 0 por el tamaño en bytes del tipo
Int en memoria (basicamente lo multiplica por 4). Pero el tamaño del tipo
Int dependiendo de que ordenador sea puede ocupar 4 bytes, o menos, a mi me ocupa 4 y se multiplica por el tamaño del tipo para dar portabilidad y usar la memoria justa para no ocupar memoria demas lo cual estarias haciendo una chapucilla por estar desperdiciendo memoria. en el codigo de pink usa un puntero y los punteros previamente declarados necesitan que se les haya reservado memoria, si no les asignas la direccion de una variable (ya que estaria usando memoria al azar) puede dar pantallazos azules o incluso la caida del sistema, por ese caso a veces son peligrosos los punteros.
Variable = direccion de memoria reservada por el programa para almacenar datos de un cierto tipo, y dependiendo de lo que ocupe el tipo es lo que ocupara en memoria.
Puntero = variable que almacena la direccion de memoria de otra variable.
salu2
Re: Tablas de multiplicar (lenguaje C)
Publicado: 13 Jul 2014, 01:33
por Pink
Los arreglos(arrays) se declara así: array[n] donde n es una constantes mayor que cero.
mira:
[Enlace externo eliminado para invitados]
Saludos
Re: Tablas de multiplicar (lenguaje C)
Publicado: 13 Jul 2014, 02:20
por Pink
Por alguna razón GCC permite hacer eso, aunque la verdad no me parece correcto.
creo que reserva espacio en la pila.
creo que en visual C no permitiría hacer eso.
Saludos