C y sus funciones
hola ...no soy un experto en .pero llevo manejando c ya un tiempo..aunque siempre lo hacia de una forma estandar..pero ahora he intentado mejorar mi forma de programar y ya tengo lios..
me explico.
deseo trabajar estructuradamente..haciendo primero funciones y procedimientos basicos y luego usarlos para implementar . rutinas mas complejas..
(por cierto soy solo un estudiante de informatica)
mi problema es este
:escribire un seudocodigo y les pido ayuda del como deba hacer las declaraciones de las funciones para que su valor de retorno me coincidan ,,en su validacion con un valor de otra funcion o puntero.
y que no me aparesca el mensaje..
error : esta comparando un puntero con un entero.
vamos a suponer algo simple.. como una introducion de un nombre en una lista.
Procedimiento Ingresar ( var Lista : tipo_lista, nombres: tipo_nombre)
{
variables pt: tipo_puntero;
elemento : tipo_nombre;
insertado : booleano;
pt = localizar_posicion(Lista,nombres);
if (pt == fin_lista (Lista))
{
pt= Primero_enlista(Lista);
insertado = falso;
while(pt <>fin_lista(Lista) and (Not (insertado)))
{
elemento=Recupera_nombrelista(Lista,pt);
if (elemento > nombres)
{
Insertar_elemento(Lista,nombres,pt);
Insertado = trae;
}
else{
pt = siguiente_enlista(Lista,pt);
}
pt = siguiente_enlista(Lista,pt);
}
if (Insertado == false)
{
Inserta_elemento(Lista,nombres,fin_lista(Lista));
}
}
bueno ,,,creo han visto el donde hago uso de llamadas a funciones dentro de otras funciones ,,asi del como de validaciones de punteros con resultados de funciones.
Y para que no crear que no me entero de nada y que solo busco una manera de que me solucionen el problema..
Les mostrare el como es que yo programo..y veran un poco ..la diferencia que hay en el uso de mis procedimientos a lo que quiero hacer.
Veamos..este es un procedimiento de búsqueda y llamadas para inserción jeje solo hare el de búsqueda.
Es muy simple. Pero funcional.
//funcion para crear datos en la lista.
Ingresar los elementos()
{
clrscr();
gotoxy(20,5);
cout <<Menu de inserciónnn;
cout << « Ingrese el nombre . » ;
cin >> nombres ;
Buscar_posicion() ;
If (Posicion == ´P´)
Inserta_Principio() ;
Else
If (Posicion == ´A´)
Inserta_AntesDe() ;
Else
If (Posicion == ´E ´)
Escribir_Error() ;
If (Posicion == ´F´)
Insertar_Final() ;
Return 0 ;
}
// Ingresar los datos despues de la primera vez
// Funcion buscar posicicion.
Buscar_posicion()
{
Posición = ´ ´;
Sw_encontrado = 0;
If (cabeza == NULL)
{
Posición = ´P´;
Sw_encontrado = 1;
};
if (strcmp(nombres,cabeza->nombre)<0)
{
Posición = ´P´;
Sw_encontrado = 1;
}
búsqueda = cabeza;
while (sw_encontrado == 0)
{
if(strcmp(nombres,búsqueda->nombre)== 0)
{
Posición = ´E´;
Sw_encontrado = 1;
}
else
if (strcmp(nombres,busquesa->nombre)<0)
{
Posicion = ´A´ ;
Sw_encontrado = 1 ;
}
else
if (busqueda->siguiente == NULL)
{
Posicion = ´F´ ;
Sw_encontrado = 1 ;
}
else
busqueda = busqueda->siguiente ;
}
return 0 ;
}
como vereis me gustaria mejorar estas fuciones , utilizando mejor pasos por apuntador a otras funciones..y realizarlo de modo parecido al seudocodigo de arriba..
alguien me puede decie como puedo hacer uso de las funciones ..para evaluarlas y que me retornen valores compatibles ..asi como la manera de ingresarlas en sentencias de validacion com por ejemplo entre un puntero y una funcion que devuelva un puntero.
Gracias.
deseo trabajar estructuradamente..haciendo primero funciones y procedimientos basicos y luego usarlos para implementar . rutinas mas complejas..
(por cierto soy solo un estudiante de informatica)
mi problema es este
:escribire un seudocodigo y les pido ayuda del como deba hacer las declaraciones de las funciones para que su valor de retorno me coincidan ,,en su validacion con un valor de otra funcion o puntero.
y que no me aparesca el mensaje..
error : esta comparando un puntero con un entero.
vamos a supones algo simple.. como una introducion de un nombre en una lista.
Procedimiento Ingresar ( var Lista : tipo_lista, nombres: tipo_nombre)
{
variables pt: tipo_puntero;
elemento : tipo_nombre;
insertado : booleano;
pt = localizar_posicion(Lista,nombres);
if (pt == fin_lista (Lista))
{
pt= Primero_enlista(Lista);
insertado = falso;
while(pt <>)
me explico.
deseo trabajar estructuradamente..haciendo primero funciones y procedimientos basicos y luego usarlos para implementar . rutinas mas complejas..
(por cierto soy solo un estudiante de informatica)
mi problema es este
:escribire un seudocodigo y les pido ayuda del como deba hacer las declaraciones de las funciones para que su valor de retorno me coincidan ,,en su validacion con un valor de otra funcion o puntero.
y que no me aparesca el mensaje..
error : esta comparando un puntero con un entero.
vamos a suponer algo simple.. como una introducion de un nombre en una lista.
Procedimiento Ingresar ( var Lista : tipo_lista, nombres: tipo_nombre)
{
variables pt: tipo_puntero;
elemento : tipo_nombre;
insertado : booleano;
pt = localizar_posicion(Lista,nombres);
if (pt == fin_lista (Lista))
{
pt= Primero_enlista(Lista);
insertado = falso;
while(pt <>fin_lista(Lista) and (Not (insertado)))
{
elemento=Recupera_nombrelista(Lista,pt);
if (elemento > nombres)
{
Insertar_elemento(Lista,nombres,pt);
Insertado = trae;
}
else{
pt = siguiente_enlista(Lista,pt);
}
pt = siguiente_enlista(Lista,pt);
}
if (Insertado == false)
{
Inserta_elemento(Lista,nombres,fin_lista(Lista));
}
}
bueno ,,,creo han visto el donde hago uso de llamadas a funciones dentro de otras funciones ,,asi del como de validaciones de punteros con resultados de funciones.
Y para que no crear que no me entero de nada y que solo busco una manera de que me solucionen el problema..
Les mostrare el como es que yo programo..y veran un poco ..la diferencia que hay en el uso de mis procedimientos a lo que quiero hacer.
Veamos..este es un procedimiento de búsqueda y llamadas para inserción jeje solo hare el de búsqueda.
Es muy simple. Pero funcional.
//funcion para crear datos en la lista.
Ingresar los elementos()
{
clrscr();
gotoxy(20,5);
cout <<Menu de inserciónnn;
cout << « Ingrese el nombre . » ;
cin >> nombres ;
Buscar_posicion() ;
If (Posicion == ´P´)
Inserta_Principio() ;
Else
If (Posicion == ´A´)
Inserta_AntesDe() ;
Else
If (Posicion == ´E ´)
Escribir_Error() ;
If (Posicion == ´F´)
Insertar_Final() ;
Return 0 ;
}
// Ingresar los datos despues de la primera vez
// Funcion buscar posicicion.
Buscar_posicion()
{
Posición = ´ ´;
Sw_encontrado = 0;
If (cabeza == NULL)
{
Posición = ´P´;
Sw_encontrado = 1;
};
if (strcmp(nombres,cabeza->nombre)<0)
{
Posición = ´P´;
Sw_encontrado = 1;
}
búsqueda = cabeza;
while (sw_encontrado == 0)
{
if(strcmp(nombres,búsqueda->nombre)== 0)
{
Posición = ´E´;
Sw_encontrado = 1;
}
else
if (strcmp(nombres,busquesa->nombre)<0)
{
Posicion = ´A´ ;
Sw_encontrado = 1 ;
}
else
if (busqueda->siguiente == NULL)
{
Posicion = ´F´ ;
Sw_encontrado = 1 ;
}
else
busqueda = busqueda->siguiente ;
}
return 0 ;
}
como vereis me gustaria mejorar estas fuciones , utilizando mejor pasos por apuntador a otras funciones..y realizarlo de modo parecido al seudocodigo de arriba..
alguien me puede decie como puedo hacer uso de las funciones ..para evaluarlas y que me retornen valores compatibles ..asi como la manera de ingresarlas en sentencias de validacion com por ejemplo entre un puntero y una funcion que devuelva un puntero.
Gracias.
deseo trabajar estructuradamente..haciendo primero funciones y procedimientos basicos y luego usarlos para implementar . rutinas mas complejas..
(por cierto soy solo un estudiante de informatica)
mi problema es este
:escribire un seudocodigo y les pido ayuda del como deba hacer las declaraciones de las funciones para que su valor de retorno me coincidan ,,en su validacion con un valor de otra funcion o puntero.
y que no me aparesca el mensaje..
error : esta comparando un puntero con un entero.
vamos a supones algo simple.. como una introducion de un nombre en una lista.
Procedimiento Ingresar ( var Lista : tipo_lista, nombres: tipo_nombre)
{
variables pt: tipo_puntero;
elemento : tipo_nombre;
insertado : booleano;
pt = localizar_posicion(Lista,nombres);
if (pt == fin_lista (Lista))
{
pt= Primero_enlista(Lista);
insertado = falso;
while(pt <>)
perdon por la sangria..se distorcio al copiar y pegar.
ademas tambien perdon .por la repeticion del mensaje en la parte de abajo.
gracias
ademas tambien perdon .por la repeticion del mensaje en la parte de abajo.
gracias
quisiera que me aga un programa que visualize el matriz y resuelva el ejemplo
Bueno, no se mi equivoco porque supongo que falta bastante codigo. Simplemente un par de cosas.
- Para hacer un buen codigo con funciones, trata de no usar variables globales. Tal cual lo veo, Posicion es global. La funcion Buscar_Posicion() cambia el valor de esa variable e Ingresar Elementos() la utiliza. Lo correcto es hacer que Buscar_Posicion() devuelva el valor de dicha variable, es decir, un char.
char Buscar_Posicion (...)
{
char Posicion = valordefecto;
...
return Posicion;
}
Las funciones deben ser lo mas independientes posibles y utilizar solo los valores que le pasan como parametros. Salvo casos excepcionales, nunca deben usar variables globales.
- En cuanto a lo de que no puedes comparar enteros con punteros o meter la funcion dentro de una comparacion, no hay ningun problema. Lo unico que debes saber es que la funcion debe devolver el mismo tipo con el que quieres comparar o asignar. Por ejemplo, para poder hacer
tipo_elemento *unElemento;
unElemento = dameElemento (lista, posicion);
dameElemento() debe devolver un tipo_elemento*
Se bueno.
- Para hacer un buen codigo con funciones, trata de no usar variables globales. Tal cual lo veo, Posicion es global. La funcion Buscar_Posicion() cambia el valor de esa variable e Ingresar Elementos() la utiliza. Lo correcto es hacer que Buscar_Posicion() devuelva el valor de dicha variable, es decir, un char.
char Buscar_Posicion (...)
{
char Posicion = valordefecto;
...
return Posicion;
}
Las funciones deben ser lo mas independientes posibles y utilizar solo los valores que le pasan como parametros. Salvo casos excepcionales, nunca deben usar variables globales.
- En cuanto a lo de que no puedes comparar enteros con punteros o meter la funcion dentro de una comparacion, no hay ningun problema. Lo unico que debes saber es que la funcion debe devolver el mismo tipo con el que quieres comparar o asignar. Por ejemplo, para poder hacer
tipo_elemento *unElemento;
unElemento = dameElemento (lista, posicion);
dameElemento() debe devolver un tipo_elemento*
Se bueno.
