Sábado 9 de Noviembre de 2024, 03:30
SoloCodigo
Bienvenido(a),
Visitante
. Por favor,
ingresa
o
regístrate
.
¿Perdiste tu
email de activación?
Inicio
Foros
Chat
Ayuda
Buscar
Ingresar
Registrarse
SoloCodigo
»
Foros
»
Programación General
»
C/C++
(Moderador:
Eternal Idol
) »
No logro regresar el resultado en llamado a función
« anterior
próximo »
Imprimir
Páginas: [
1
]
Autor
Tema: No logro regresar el resultado en llamado a función (Leído 1562 veces)
LenguajeC
Miembro activo
Mensajes: 28
Nacionalidad:
No logro regresar el resultado en llamado a función
«
en:
Lunes 10 de Mayo de 2010, 00:43 »
0
Hola a todos.-
Como este es mi primer post voy a presentarme porque mi situación es un tanto particular.-
Tengo 58 años y por mi trabajo y por distar 90 km. de la universidad mas cercana no tengo otra manera que leer,leer y consultar en los foros.-
Bueno, a continuación les dejo mi primer problema para ver si me dan una mano con la solución y me dicen en que debo mejorar el programa.-
Código: C
#include <stdio.h>
#include <stdlib.h>
#include <windows.h>
#include <conio.h>
HANDLE consola
;
COORD posicion
;
void
dlq
(
int
hor
,
int
ver
)
;
void
ejemplos
(
)
;
double
separa
(
char
ingreso
[
]
,
double
*
resultado
)
;
double
*
opciones
(
double
memoria
,
double
resultado
)
;
int
main
(
int
argc
,
char
*
argv
[
]
)
{
consola
=
GetStdHandle
(
STD_OUTPUT_HANDLE
)
;
system
(
"color 9E"
)
;
ejemplos
(
)
;
double
resultado
,
memoria
=
0
;
char
ingreso
[
50
]
;
while
(
ingreso
[
0
]
!=
's'
)
{
system
(
"cls"
)
;
ejemplos
(
)
;
dlq
(
20
,
4
)
;
printf
(
" Ingreso....: s - para finalizar"
)
;
dlq
(
18
,
51
)
;
printf
(
"%5.3f"
,
memoria
)
;
dlq
(
20
,
18
)
;
gets
(
ingreso
)
;
if
(
ingreso
[
0
]
!=
'0'
)
{
separa
(
ingreso
,&
resultado
)
;
if
(
resultado
!=
0
)
{
dlq
(
18
,
17
)
;
printf
(
"%5.3f"
,
resultado
)
;
opciones
(
memoria
,
resultado
)
;
ingreso
[
0
]
=
' '
;
}
}
else
{
system
(
"color C1"
)
;
dlq
(
24
,
5
)
;
printf
(
"Ingreso incorrecto - por favor revise los ejemplos"
)
;
dlq
(
26
,
5
)
;
system
(
"pause"
)
;
system
(
"color 9E"
)
;
dlq
(
26
,
5
)
;
}
}
return
0
;
}
void
dlq
(
int
hor
,
int
ver
)
{
posicion.
X
=
ver
;
posicion.
Y
=
hor
;
SetConsoleCursorPosition
(
consola
,
posicion
)
;
}
double
separa
(
char
ingreso
[
]
,
double
*
resultado
)
{
char
opUno
[
50
]
,
oper
[
50
]
,
opDos
[
50
]
,
priseg
=
65
;
int
i
=
0
,
poper
=
0
,
pseg
=
0
;
for
(
i
=
0
;
i
<
strlen
(
ingreso
)
;
i
++
)
{
if
(
(
ingreso
[
i
]
==
42
||
ingreso
[
i
]
==
43
||
ingreso
[
i
]
==
45
||
ingreso
[
i
]
==
47
)
)
{
oper
[
poper
]
=
ingreso
[
i
]
;
oper
[
poper
+
1
]
=
' '
;
poper
++;
priseg
=
priseg
+
1
;
}
else
{
if
(
priseg
==
65
)
{
opUno
[
i
]
=
ingreso
[
i
]
;
opUno
[
i
+
1
]
=
' '
;
}
else
{
opDos
[
pseg
]
=
ingreso
[
i
]
;
opDos
[
pseg
+
1
]
=
' '
;
pseg
++;
}
}
}
char
op_1
[
50
]
,
op_2
[
50
]
;
int
lugar
=
0
;
for
(
i
=
0
;
opUno
[
i
]
!=
' '
;
i
++
)
{
if
(
(
opUno
[
i
]
>
47
&&
opUno
[
i
]
<
58
)
||
(
opUno
[
i
]
==
46
)
)
{
op_1
[
lugar
]
=
opUno
[
i
]
;
lugar
++;
op_1
[
lugar
]
=
' '
;
}
}
lugar
=
0
;
for
(
i
=
0
;
opDos
[
i
]
!=
' '
;
i
++
)
{
if
(
(
opDos
[
i
]
>
47
&&
opDos
[
i
]
<
58
)
||
(
opDos
[
i
]
==
46
)
)
{
op_2
[
lugar
]
=
opDos
[
i
]
;
lugar
++;
op_2
[
lugar
]
=
' '
;
}
}
if
(
strlen
(
opUno
)
==
strlen
(
op_1
)
&&
strlen
(
opDos
)
==
strlen
(
op_2
)
&&
strlen
(
oper
)
==
1
)
{
double
op_uno
=
0
,
op_dos
=
0
;
op_uno
=
atof
(
op_1
)
;
op_dos
=
atof
(
op_2
)
;
if
(
oper
[
0
]
==
'+'
)
*
resultado
=
op_uno
+
op_dos
;
if
(
oper
[
0
]
==
'-'
)
*
resultado
=
op_uno
-
op_dos
;
if
(
oper
[
0
]
==
'*'
)
*
resultado
=
op_uno
*
op_dos
;
if
(
oper
[
0
]
==
'/'
)
*
resultado
=
op_uno
/
op_dos
;
}
else
{
*
resultado
=
0
;
}
return
(
*
resultado
)
;
}
void
ejemplos
(
)
{
dlq
(
2
,
4
)
;
printf
(
" ---------------------- Calculadora lineal ----------------------"
)
;
dlq
(
4
,
4
)
;
printf
(
" Ejemplos:"
)
;
dlq
(
6
,
13
)
;
printf
(
" Suma...........: 125.4+18"
)
;
dlq
(
8
,
13
)
;
printf
(
" Resta..........: 125-10.54"
)
;
dlq
(
10
,
13
)
;
printf
(
" MultiplicacixA2n.: 125.48*10.50"
)
;
dlq
(
12
,
13
)
;
printf
(
" DivicixA2n.......: 678.48/5.99"
)
;
dlq
(
14
,
13
)
;
printf
(
" No dejar espacios - x3C Enter x3E confirma"
)
;
dlq
(
16
,
4
)
;
printf
(
" ----------------------------------------------------------------"
)
;
dlq
(
18
,
4
)
;
printf
(
" Resultado..: Memoria....:"
)
;
}
double
*
opciones
(
double
memoria
,
double
resultado
)
{
dlq
(
22
,
5
)
;
printf
(
"----------------------------------------------------------------"
)
;
dlq
(
24
,
5
)
;
printf
(
"Opciones de memoria"
)
;
dlq
(
26
,
5
)
;
printf
(
"1 - Menoria +"
)
;
dlq
(
28
,
5
)
;
printf
(
"2 - Menoria -"
)
;
dlq
(
30
,
5
)
;
printf
(
"3 - Borra memoria y memoria +"
)
;
dlq
(
32
,
5
)
;
printf
(
"4 - Borra memoria y memoria -"
)
;
dlq
(
34
,
5
)
;
printf
(
"5 - Sin ingerencia en memoria"
)
;
int
opc
=
0
;
while
(
opc
<
1
||
opc
>
5
)
{
dlq
(
36
,
5
)
;
printf
(
"Ingreso...:"
)
;
scanf
(
"%d"
,&
opc
)
;
dlq
(
38
,
5
)
;
switch
(
opc
)
{
case
1
:
memoria
=
memoria
+
resultado
;
break
;
case
2
:
memoria
=
memoria
-
resultado
;
break
;
case
3
:
memoria
=
resultado
;
break
;
case
4
:
memoria
=
-
resultado
;
break
;
case
5
:
break
;
default
:
printf
(
"Solo numeros del 1 al 5, apriete una tecla para continuar..."
)
;
getch
(
)
;
}
}
return
&
memoria
;
}
Un gran saludo.-
Daniel
Nota:Lenguaje C - Windows XP - DEV-C++.-
Tweet
abraza las cosas y personas malas como si fueran tu mas preciada joya,
Son tus mas grandes maestros de paciencia sabiduría y amor
y cuando lo abrazas dejan de causar dolor.-
vite666
Nuevo Miembro
Mensajes: 13
Re: No logro regresar el resultado en llamado a función
«
Respuesta #1 en:
Lunes 10 de Mayo de 2010, 03:53 »
0
y cual es su problema?
LenguajeC
Miembro activo
Mensajes: 28
Nacionalidad:
Re: No logro regresar el resultado en llamado a función
«
Respuesta #2 en:
Lunes 10 de Mayo de 2010, 18:15 »
0
Hola vite666
Perdón que torpe, mil disculpas.-
El problema es que no logro regresar la variable "memoria" a la función main con el contenido que obtengo de la llamada "opciones(memoria,resultado);".-
Espero que ahora se entienda.-
Saludos.
Daniel
abraza las cosas y personas malas como si fueran tu mas preciada joya,
Son tus mas grandes maestros de paciencia sabiduría y amor
y cuando lo abrazas dejan de causar dolor.-
Epa
Miembro MUY activo
Mensajes: 242
Nacionalidad:
Re: No logro regresar el resultado en llamado a función
«
Respuesta #3 en:
Lunes 10 de Mayo de 2010, 20:30 »
0
Buenas.
Por un lado, en el llamado a funcion no estas asignando el valor de retorno a ninguna variable..
Por otro lado, la funcion devuelve un puntero a double, y estas devolviendo un putero a "memoria", lo que es una variable local a la funcion y cuando se sale de esta, esa memoria deja de estar reservada. El compilador deberia tirarte un warning en la linea del return.
Si la idea es registrar los cambios en la variable, podes hacer las siguientes modificaciones:
definir la funcion:
double opciones(double memoria,double resultado);
y hacer al llamado:
mamoria = opciones(memoria, resultado);
o
definir la funcion:
void opciones(double *memoria,double resultado);
y hacer el llamado a funcion:
opciones(&memoria, resultado);
para esta ultima hace falta cambiar el cuerpo de la funcion para que memoria sea tratada como un puntero.
Espero que sirva.
Saludos
The sweet smell of a great sorrow lies over the land.
LenguajeC
Miembro activo
Mensajes: 28
Nacionalidad:
Re: No logro regresar el resultado en llamado a función
«
Respuesta #4 en:
Martes 11 de Mayo de 2010, 02:51 »
0
Hola Epa
Gracias por tu respuesta, voy a poner en práctica lo que me dices, solo que lo voy a hacer sin puntero porque estoy muy al principio y quiero ir despacio.-
Saludos.
Daniel
abraza las cosas y personas malas como si fueran tu mas preciada joya,
Son tus mas grandes maestros de paciencia sabiduría y amor
y cuando lo abrazas dejan de causar dolor.-
Imprimir
Páginas: [
1
]
« anterior
próximo »
SoloCodigo
»
Foros
»
Programación General
»
C/C++
(Moderador:
Eternal Idol
) »
No logro regresar el resultado en llamado a función