Nuevas NORMAS para el foro
Bienvenido(a),
Visitante
. Favor de
ingresar
o
registrarse
.
¿Perdiste tu
email de activación?
- ſeptiembre 08, 2008, 12:11:38
Boton Buscar
Visita:
Articulos
-
Juegos Gratis
-
Da Foros
Comunidad Underground Hispana
|
Programacion
|
Programación
|
Carbide C/C#/C++
| Tema:
Mejorar este code...
0 Usuarios y 1 Visitante están viendo este tema.
« anterior
próximo »
Páginas:
[
1
]
Autor
Tema: Mejorar este code... (Leído 329 veces)
Furious Dami
Gran Colaborador
Desconectado
Mensajes: 2176
Prefiero morir de pie que vivir arrodillado...
Mejorar este code...
«
en:
Diciembre 18, 2007, 01:19:29 »
Hola, ayer estaba leyendo un poco de C y se me ocurrio hacer este code:
Código:
#include <stdio.h>
main()
{
int numero; /* Defino numero como entero */
int multiplica; /* Defino multiplica como entero*/
int resultado; /* lo mismo con resultado... */
/* Ahora les asigno valores */
numero = 2000;
multiplica = 3;
resultado = numero * multiplica; /* Multiplico 200 * 3 */
printf("Resultado=%d", resultado); /* Muestra el resultado */
getchar();
return 0;
}
pero quiero que antes de multiplicar te pida los 2 numeros y despues recien multiplique con los numeros que le diste.
O sea, que te pregunte que numeros queres multiplicar.
Solo que no se como hacerlo, agradesco si me explican como
Saludos
En línea
Una persona se hace realmente fuerte cuando protege a un ser querido...
Para ver los enlaces debes ser usuario
Crear Usuario
o
Hacer Sesion
-|| Furious Zona ||-
Ni0
Gran Colaborador
Desconectado
Mensajes: 1365
Ni0-inside the source code
Re: Mejorar este code...
«
Respuesta #1 en:
Diciembre 18, 2007, 03:04:05 »
hola, mira furious dami quisa si leias unas paginas mas adelante encontrabas la solucion xD; a mi me paso lo mismo, busque en el libro como se hacia y resulta que lo explicaba un poquito mas adelante xD
con scanf, se usa parecido a printf
por ejemplo:
scanf("%d %d", &variable, &otra_variable);
con %d le indicas que lo que lea lo pase a numeros, osea, si vos pusieras %c leeria un caracter, si escribis 1 te lee el caracter 1, pero si pones %d le asigna el valor 1 a la variable
y tenes que usar & antes de las variables, exepto que esperes una cadena de caracteres (ya entenderas porque)
salu2!
En línea
Inside The Source Code
Para ver los enlaces debes ser usuario
Crear Usuario
o
Hacer Sesion
Linux Registred User #460377
FreakMind
Habitual
Desconectado
Mensajes: 181
Re: Mejorar este code...
«
Respuesta #2 en:
Diciembre 18, 2007, 04:52:08 »
Buenas
La respuesta de Nio esta bien, aunque una respuesta mas acertada seria que visitaras esta pagina -->
Para ver los enlaces debes ser usuario
Crear Usuario
o
Hacer Sesion
www.usaelputogoogle.com
Salu2
En línea
Connoisseurs of C semantics find C++ inferior to ++C
Ni0
Gran Colaborador
Desconectado
Mensajes: 1365
Ni0-inside the source code
Re: Mejorar este code...
«
Respuesta #3 en:
Diciembre 18, 2007, 04:55:15 »
Cita de: ҒrεακΜιи∂ en Diciembre 18, 2007, 04:52:08
Buenas
La respuesta de Nio esta bien, aunque una respuesta mas acertada seria que visitaras esta pagina -->
Para ver los enlaces debes ser usuario
Crear Usuario
o
Hacer Sesion
www.usaelputogoogle.com
Salu2
esa respuesta me hace recordar a un user resientemente banneado que su nik empieza con da y termina con rkiker xD
salu2!
En línea
Inside The Source Code
Para ver los enlaces debes ser usuario
Crear Usuario
o
Hacer Sesion
Linux Registred User #460377
Ni0
Gran Colaborador
Desconectado
Mensajes: 1365
Ni0-inside the source code
Re: Mejorar este code...
«
Respuesta #4 en:
Diciembre 18, 2007, 05:01:38 »
jajajaja no sabia que la pagina existia, jajajjajajajajajaja
salu2!
En línea
Inside The Source Code
Para ver los enlaces debes ser usuario
Crear Usuario
o
Hacer Sesion
Linux Registred User #460377
FreakMind
Habitual
Desconectado
Mensajes: 181
Re: Mejorar este code...
«
Respuesta #5 en:
Diciembre 18, 2007, 05:07:01 »
Cita de: Ni0 en Diciembre 18, 2007, 04:55:15
esa respuesta me hace recordar a un user resientemente banneado que su nik empieza con da y termina con rkiker xD
Si, se la tome prestada por un tiempo jeje
Salu2
En línea
Connoisseurs of C semantics find C++ inferior to ++C
dreams_eater
Habitual
Desconectado
Mensajes: 176
Re: Mejorar este code...
«
Respuesta #6 en:
Diciembre 18, 2007, 06:47:22 »
Citar
su nik empieza con da y termina con rkiker xD
jaajajjajajajja
Citar
Hola, ayer estaba leyendo un poco de C y se me ocurrio hacer este code:
puedes pedir los numeros que quieras y en el orden que quieras, solo deves imaginar que cada funcion cumple una acción precisa, el "para que" no importa.
puedes ayudarte con diagramas de flujo.
que libro lees?
En línea
"La juventud envejece, la inmadurez se supera, la ignorancia puede educarse, y la borrachera desperjarse, pero la estupidez dura para siempre" - Aristófanes
FreakMind
Habitual
Desconectado
Mensajes: 181
Re: Mejorar este code...
«
Respuesta #7 en:
Diciembre 18, 2007, 11:57:50 »
Cita de: dreams_eater en Diciembre 18, 2007, 06:47:22
puedes pedir los numeros que quieras y en el orden que quieras, solo deves imaginar que cada funcion cumple una acción precisa, el "para que" no importa.
Es correcto que una funcion (idealmente) tenga una y solo una tarea pero lo que no debe importar es
como
dicha tarea se realiza. Ademas, creo que tener una funcion en un programa o sistema, y no saber
para que
la tenes, es un problema
Salu2, FreakMind
«
Última modificación: Diciembre 18, 2007, 11:58:31 por ҒrεακΜιи∂
»
En línea
Connoisseurs of C semantics find C++ inferior to ++C
[p3ll3]
Colaborador
Desconectado
Mensajes: 527
... Open your eyes , open your mind ...
Re: Mejorar este code...
«
Respuesta #8 en:
Diciembre 19, 2007, 01:33:58 »
Como el tema es mejorar ese code aqui respondo , no se mucho de C pero ahi trate de hacerlo
(si funciona)
Aclaro que solo sirve para numeros enteros ...
Código:
#include <stdio.h> // IO de datos
main()
{
int numero,resultado=1; /* Defino numero y resultado como entero */
int cont=1; // hago esta variable para controlar cuando parar de preguntar factores.
// Antes de asignar pido los factores a multiplicar.
while(cont == 1){ // ciclo de repeticion, ejecuta todo lo que esta dentro de las llaves hasta que no se cumpla la condicion.
printf("\nDigite un factor a multiplicar: ");
scanf ("%d",&numero); // lee un numero entero.
resultado*=numero; //aumenta la variable resultado multiplicandola por lo que se le asigno a la variable numero.
printf("\nPara ver el resultado presione 0 y 1 para continuar: ");
scanf ("%d",&cont); // obtiene 1 o 0 para hacer lo que dice arriba.
cont=cont; // le asigno el cero a la variable cont y se sale del while.
}
printf("\n\nResultado=%d",resultado); /* Muestra el resultado */
printf("\n\n"); // Deja espacios
return 0;
}
«
Última modificación: Diciembre 19, 2007, 01:39:08 por [p3ll3]
»
En línea
Para ver los enlaces debes ser usuario
Crear Usuario
o
Hacer Sesion
Para ver los enlaces debes ser usuario
Crear Usuario
o
Hacer Sesion
dreams_eater
Habitual
Desconectado
Mensajes: 176
Re: Mejorar este code...
«
Respuesta #9 en:
Diciembre 19, 2007, 11:44:27 »
Cita de: ҒrεακΜιи∂ en Diciembre 18, 2007, 11:57:50
pero lo que no debe importar es
como
dicha tarea se realiza.
a menos que te pidan hacer dicha funcion.
estoy de acuerdo contigo
En línea
"La juventud envejece, la inmadurez se supera, la ignorancia puede educarse, y la borrachera desperjarse, pero la estupidez dura para siempre" - Aristófanes
FreakMind
Habitual
Desconectado
Mensajes: 181
Re: Mejorar este code...
«
Respuesta #10 en:
Diciembre 19, 2007, 11:58:39 »
Cita de: dreams_eater en Diciembre 19, 2007, 11:44:27
a menos que te pidan hacer dicha funcion.
estoy de acuerdo contigo
Obviamente si tenes que crear una funcion te va a importar como hacer que cumpla su tarea. Pero como dijiste
"solo deves imaginar que cada cumple una acción precisa"
y
"puedes ayudarte con diagramas de flujo"
, me sono que estabas hablando la parte del diseño del programa
Salu2
En línea
Connoisseurs of C semantics find C++ inferior to ++C
Thornevald
Visitante
Re: Mejorar este code...
«
Respuesta #11 en:
Diciembre 19, 2007, 04:18:21 »
Pregunta off-topic:
hace mucho que no paso por aca, porque bannearon a darkiker?
estara en google tmb la respuesta? xD
Saludos
«
Última modificación: Diciembre 19, 2007, 04:18:55 por Thornevald
»
En línea
Ni0
Gran Colaborador
Desconectado
Mensajes: 1365
Ni0-inside the source code
Re: Mejorar este code...
«
Respuesta #12 en:
Diciembre 19, 2007, 04:22:08 »
xD, por un link... se pelio con un moderador por un link que supuestamente era un compilador C/C++ y resulto ser un virus
salu2!
En línea
Inside The Source Code
Para ver los enlaces debes ser usuario
Crear Usuario
o
Hacer Sesion
Linux Registred User #460377
dreams_eater
Habitual
Desconectado
Mensajes: 176
Re: Mejorar este code...
«
Respuesta #13 en:
Diciembre 19, 2007, 07:59:40 »
Cita de: Thornevald en Diciembre 19, 2007, 04:18:21
Pregunta off-topic:
hace mucho que no paso por aca, porque bannearon a darkiker?
estara en google tmb la respuesta? xD
Saludos
antes de leer tube un deja-bu de este post .
Cita de: Ni0 en Diciembre 19, 2007, 04:22:08
xD, por un link... se pelio con un moderador por un link que supuestamente era un compilador C/C++ y resulto ser un virus
salu2!
que??!! deve haver mucha bronca y confucion hay.
veo que el virus fue compilado con exito.
Que dé un link, darkIker, es tan raro como que nievé en Córdoba capital.
darkIker baneado temporalmente,
ojalá tengamos un "usuario temporal" que sepa como darkIker y que tambien te mande a googlear.
En línea
"La juventud envejece, la inmadurez se supera, la ignorancia puede educarse, y la borrachera desperjarse, pero la estupidez dura para siempre" - Aristófanes
FreakMind
Habitual
Desconectado
Mensajes: 181
Re: Mejorar este code...
«
Respuesta #14 en:
Diciembre 19, 2007, 08:09:58 »
Buenas
Cita de: dreams_eater en Diciembre 19, 2007, 07:59:40
Que dé un link, darkIker, es tan raro como que nievé en Córdoba capital.
El link con el virus lo dejo un moderador no DarkIker. Y guarda que quizas la nieve de este año se nos vuelve costumbre
Salu2, FreakMind
En línea
Connoisseurs of C semantics find C++ inferior to ++C
dreams_eater
Habitual
Desconectado
Mensajes: 176
Re: Mejorar este code...
«
Respuesta #15 en:
Diciembre 19, 2007, 09:04:19 »
si el no planto la bomba, porque lo detubieron?
Citar
Y guarda que quizas la nieve de este año se nos vuelve costumbre
ello fue un proceso climatico ciclico, se repetira cuando estemos muertos dentro de cien años, lo explicarón.
al menos que en el proximo sea por un factor del cambio climatico.
En línea
"La juventud envejece, la inmadurez se supera, la ignorancia puede educarse, y la borrachera desperjarse, pero la estupidez dura para siempre" - Aristófanes
FreakMind
Habitual
Desconectado
Mensajes: 181
Re: Mejorar este code...
«
Respuesta #16 en:
Diciembre 19, 2007, 09:56:11 »
Cita de: dreams_eater en Diciembre 19, 2007, 09:04:19
si el no planto la bomba, porque lo detubieron?
Porque se ve que lo trato mal o algo asi... realmente no recuerdo
Cita de: dreams_eater en Diciembre 19, 2007, 09:04:19
ello fue un proceso climatico ciclico, se repetira cuando estemos muertos dentro de cien años, lo explicarón..
Tambien dicen que hara sol y cae granizo del tamaño de un huevo de gallina xD
Para ir cerrando este thread (porque realmente se desvirtuo completamente) digo una cosita sobre el codigo de [p3ll3] y una posible solucion
scanf ("%d",&cont);
ya le asigna a cont un valor, por lo que hacer
cont = cont;
es innecesario (y hasta un poco ridiculo).
Código:
#include <stdio.h>
int main(void)
{
int n1, n2;
char op;
printf("Ingrese calculo: ");
scanf("%d %c %d", &n1, &op, &n2);
fflush(stdin); /* Esto es porque en el buffer queda el /n */
switch(op){
case '+':
n1 += n2;
break;
case '-':
n1 -= n2;
break;
case '*':
n1 *= n2;
break;
case '/':
n1 /= n2;
break;
default:
printf("Error\n");
return 1;
}
printf("Resultado: %d\n", n1);
getchar();
return 0;
}
En línea
Connoisseurs of C semantics find C++ inferior to ++C
[p3ll3]
Colaborador
Desconectado
Mensajes: 527
... Open your eyes , open your mind ...
Re: Mejorar este code...
«
Respuesta #17 en:
Diciembre 20, 2007, 01:56:06 »
, si tienes razon , pero toma en cuenta a la hora que yo hice el code y a la hora que lo hizo ud y hasta con tiempo de pensarlo y me imagino que sabes programar en C
Que pasaria si quiero poner mas de dos factores en la multiplicacion, en tu code
Saludos...............
[p3ll3]
«
Última modificación: Diciembre 20, 2007, 01:59:52 por [p3ll3]
»
En línea
Para ver los enlaces debes ser usuario
Crear Usuario
o
Hacer Sesion
Para ver los enlaces debes ser usuario
Crear Usuario
o
Hacer Sesion
FreakMind
Habitual
Desconectado
Mensajes: 181
Re: Mejorar este code...
«
Respuesta #18 en:
Diciembre 20, 2007, 07:43:25 »
Buenas...
Cita de: [p3ll3] en Diciembre 20, 2007, 01:56:06
pero toma en cuenta a la hora que yo hice el code y a la hora que lo hizo ud
No te confies en la hora, ya que la hora del foro no tiene por que ser la hora en mi pais. El codigo lo postie tipo 12:30 - 1:00 am
Cita de: [p3ll3] en Diciembre 20, 2007, 01:56:06
y hasta con tiempo de pensarlo
No habia demasiado para pensar y no es que me estuve matando durante el dia pensandolo. Decidi dejarlo cuando vi que el thread se desvio demasiado de su proposito original
Cita de: [p3ll3] en Diciembre 20, 2007, 01:56:06
Que pasaria si quiero poner mas de dos factores en la multiplicacion, en tu code
Simple... no funcionaria... pero tampoco usaria este codigo para ese tipo de funcionalidad. Usaria este (es largo, sepan disculpar)
Código:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
enum{STATE_N,STATE_O,STATE_E};
#define LINE
100
#define isoperator(c)
((c == '+' || c == '-' || c == '*' || c == '/')? 1 : 0)
#define col(c)
(isdigit(c)? STATE_N : (isoperator(c)? STATE_O : STATE_E))
#define prio(c)
((c == '+' || c == '-')? 0:(c == '/'? 1 : 2))
#define maxpriority(c,top)
(prio(c) <= prio(top)? c : top)
typedef struct tree{
int
value;
char
type;
struct tree
*left;
struct tree
*right;
}tree_t;
typedef struct stack{
tree_t
*root;
struct stack
*next;
}stack_t;
typedef struct op_stack{
unsigned char
operator;
struct op_stack
*next;
}op_t;
int o_addstk(op_t **, unsigned char);
int o_remstk(op_t **, unsigned char *);
int n_addstk(stack_t **, tree_t *);
int n_remstk(stack_t **, tree_t **);
int calcular(const char s[]);
int maketree(tree_t **, int ,tree_t *, tree_t *);
void recorrer(tree_t *root,int *);
int main(void)
{
char
s[LINE];
while(1){
printf("\nEscriba un calculo:\n");
if(!fgets(s,LINE,stdin)){
printf("Error al leer calculo\n");
exit(EXIT_FAILURE);
}
s[strlen(s)-1] = '\0';
if(calcular(s))
printf("Error en el calculo\n");
}
exit(EXIT_SUCCESS);
}
int o_addstk(op_t **stk, unsigned char c)
{
op_t
*ptr;
if(!(ptr = malloc(sizeof(op_t))))
return 1;
ptr->operator = c;
ptr->next = *stk;
*stk = ptr;
return 0;
}
int o_remstk(op_t **stk, unsigned char *c)
{
op_t
*ptr;
if(!(*stk))
return 1;
ptr = *stk;
*stk = (*stk)->next;
*c = ptr->operator;
free(ptr);
return 0;
}
int n_addstk(stack_t **stk, tree_t *root)
{
stack_t
*ptr;
if(!(ptr = malloc(sizeof(stack_t)))){
printf("n_addstk: Error al crear nodo\n");
return 1;
}
if(!(ptr->root = malloc(sizeof(tree_t)))){
printf("n_addstk: Error al crear root\n");
return 1;
}
memset(ptr->root,0x00,sizeof(tree_t));
memcpy(ptr->root,root,sizeof(tree_t));
ptr->next = *stk;
*stk = ptr;
return 0;
}
int n_remstk(stack_t **stk, tree_t **root)
{
stack_t
*ptr;
if(!(*stk))
return 1;
ptr = *stk;
*stk = (*stk)->next;
if(!(*root = malloc(sizeof(tree_t))))
return 1;
(*root)->value = ptr->root->value;
(*root)->type = ptr->root->type;
(*root)->left = ptr->root->left;
(*root)->right = ptr->root->right;
free(ptr);
return 0;
}
int calcular(const char s[])
{
int
num = 0,cur_state = 0, c, aux;
static int
state_table [3][3] = {{0,1,2},{0,2,2},{2,2,2}};
tree_t
*root,*n1,*n2;
stack_t
*numbers = NULL;
op_t
*operators = NULL;
char
*tmp =(char*) s;
while((c = *s++)){
cur_state = state_table[cur_state][col(c)];
switch(cur_state){
case STATE_N:
num = (num * 10) + (c - '0');
break;
case STATE_O:
if(!(root = malloc(sizeof(tree_t))))
return 1;
root->value = num;
root->type = 'n';
root->left = root->right = NULL;
if(n_addstk(&numbers,root)){
printf("Error al almacenar operando\n");
return 1;
}
num = 0;
if(operators && (maxpriority(c,operators->operator) == c)){
while(operators && prio(c) <= prio(operators->operator)){
if(o_remstk(&operators,(unsigned char*)&aux)){
printf("calcular: error en o_remstk\n");
return 1;
}
if(n_remstk(&numbers,&n2)){
printf("calcular: Error en n_remstk\n");
return 1;
}
if(n_remstk(&numbers,&n1)){
printf("calcular: Error en n_remstk\n");
return 1;
}
if(maketree(&root,(unsigned char)aux,n1,n2)){
printf("calcular: Error en maketree\n");
return 1;
}
if(n_addstk(&numbers,root)){
printf("calcular: Error en n_addstk\n");
return 1;
}
}
}
if(o_addstk(&operators,c)){
printf("calcular: Error en o_addstk\n");
return 1;
}
break;
default:
printf("El caracter [%c] es invalido\n",c);
return 1;
break;
}
}
if(!c){
if(!(root = malloc(sizeof(tree_t))))
return 1;
root->value = num;
root->type = 'n';
root->left = root->right = NULL;
if(n_addstk(&numbers,root)){
printf("Error al almacenar operando\n");
return 1;
}
num = 0;
if(operators){
while(operators){
if(o_remstk(&operators,(unsigned char*)&aux)){
printf("calcular: error en o_remstk\n");
return 1;
}
if(n_remstk(&numbers,&n2)){
printf("calcular: Error en n_remstk\n");
return 1;
}
if(n_remstk(&numbers,&n1)){
printf("calcular: Error en n_remstk\n");
return 1;
}
if(maketree(&root,aux,n1,n2)){
printf("calcular: Error en maketree\n");
return 1;
}
if(n_addstk(&numbers,root)){
printf("calcular: Error en n_addstk\n");
return 1;
}
}
}
if(o_addstk(&operators,c)){
printf("calcular: Error en o_addstk\n");
return 1;
}
}
if(n_remstk(&numbers,&root)){
printf("Error al quitar nodo\n");
return 1;
}
num = 0;
recorrer(root,&num);
printf("Resultado de calculo [%s] es : %d\n",tmp,num);
return 0;
}
void recorrer(tree_t *root, int *rdo)
{
int
n1 = 0, n2 = 0;
if(root){
recorrer(root->left,&n1);
if(root->type != 'o'){
*rdo = root->value;
return;
}
recorrer(root->right,&n2);
if(root->type != 'o'){
*rdo = root->value;
return;
}
switch(root->value){
case '+':
*rdo = n1 + n2;
return;
break;
case '-':
*rdo = n1 - n2;
return;
break;
case '*':
*rdo = n1 * n2;
return;
break;
case '/':
if(!n2){
printf("No se puede dividir por 0\n");
exit(EXIT_FAILURE);
}
*rdo = n1 / n2;
return;
break;
}
}
return;
}
int maketree(tree_t **root, int c,tree_t *left, tree_t *right)
{
if(!(*root = malloc(sizeof(tree_t))))
return 1;
(*root)->value = c;
(*root)->type = 'o';
if(!((*root)->left = malloc(sizeof(tree_t))))
return 1;
memset((*root)->left,0x00,sizeof(tree_t));