[C con Clase] Funciones
amauri d
b_duhart en live.com.mx
Jue Ene 10 20:21:01 CET 2013
Gracias a ambos.
Antonio:
Respecto a utilizar el array como parametro, había hecho eso hasta que, revisando el curso, vi que aún no sabía cómo hacer esto y que es distinto que con una sola variable.
Respecto al bucle y las variables globales, tienes razón, me percaté cuando leí el código de nuevo viendo tu repuesta.
Y respecto a la parte de los algoritmos y los diagramas, sí me fue útil, aunque eso no me causaba problema, puesto que ya sabía sobre dicho tema.
Gracias de nuevo.
Ambos:
Sigo sin tener claro por qué requiero repetir el tipo de parámetro al declarar la función, creí que bastaba con declararlo al principio del programa:
...
char tipo_orden;
void Ordenar(tipo_orden);
Date: Wed, 9 Jan 2013 08:22:38 +0100
From: antonio.arjona.melches en gmail.com
To: cconclase en listas.conclase.net
Subject: Re: [C con Clase] Funciones
El 09/01/13 02:56, amauri d escribió:
#include <iostream>
using namespace std;
int array_1[10],i,round;
char tipo_orden;
//La siguiente función ordena la cadena
void Ordenar(tipo_orden)
{
int cambio=0;
//Cuando el ordenamiento sea ascendente
if(tipo_orden=='a')
{
round=0;
do
{
//Se revisan los elementos del array y se ordenan por
pares
for(i=1;array_1[i];i++)
{
if(array_1[i]<array_1[i-1]) {cambio=array_1[i];
array_1[i]=array_1[i-1]; array_1[i-1]=cambio;}
}
round++
}
while(array_1[round]); //El ciclo se repite mientras
exista el elemento array_1[round], round es la pasada por el array
}
//Cuando el ordenamiento sea descendente
else if(tipo_orden=='z')
{
round=0;
do
{
//Se revisan los elementos del array y se ordenan por
pares
for(i=1;array_1[i];i++)
{
if(array_1[i]>array_1[i-1]) {cambio=array_1[i];
array_1[i]=array_1[i-1]; array_1[i-1]=cambio;}
}
round++;
}
while(array_1[round]); //El ciclo se repite mientras
exista el elemento array_1[round], round es la pasada por el array
}
}
Hola amauri:
lo primero que veo son las variables, y te comento:
es aconsejable que uses variables locales en vez de globales, esto
seria dentro de la función.
luego declaras la función directamente, esto no esta mal, pero si
seria aconsejable que la primera función que se vea al leer tu
codigo sea main(), esto simplemente ayuda a interpretar mejor el
código, por parte de las personas, pero esto supone que le tienes
que informar al compilador que las funciones que llames desde main()
u otra función, para ello dispones de la posibilidad de crear
prototipos, de la siguiente forma:
// declaras un prototipo de las funciones que hagas
void MiFuncion(char, int, bool); // esto seria un prototipo de una
función con tres parámetros de entrada y sin retorno (void)
// en el prototipo solo necesitas usar el tipo de parámetro (char,
int, float ....), pero puedes añadir a modo de explicación el
parámetro
// por poner un ejemplo el prototipo de una función que te diera la
nota de fin de curso
// a partir de un array de notas parciales, y la confirmación de
asistencia mínima:
int NotasFinDeCurso( int NotasTrimestrales, bool AsistenciaMinima);
int OtraFuncion(); // esto seria un prototipo de una función sin
parámetros que retorna un entero (int)
// declaración de main() después de los prototipos
int main()
{
// llamo a MiFuncion(), como antes hay un prototipo de esta
función
// el compilador sabe que existe y la busca en el código
restante
MiFuncion(cadena[10], 5, true);
return 0;
}
// después de main() declaras tus funciones
void MiFunción(char cadena[10], int numero, bool SIoNO)
{
// el código de la función
...
}
// otra función
int NotasFinDeCurso( int Notas, bool Asistencia)
{
... // el codigo
}
de esta forma es mucho mas fácil de leer por parte de las personas
luego, en la declaración de la función solo especificas un parámetro
para el sentido de ordenación: void Ordenar (tipo_orden)
tienes que especificar de que se trata, en tu caso seria: void
Ordenar (char tipo_orden) // de hay el error que te da el compilador
creo que usar un char para indicar una decision es complicarse la
vida, yo usaria un bool para las 2 opciones: false para ordenar de
mayor a menor y true de menor a mayor, o un int si las opciones son
3 o mas.
luego también necesitarías incluir un parámetro para los arrays, el
motivo es que de momento en tu código creas globalmente una cadena
numerica: int array_1[10]; y la manejas directamente desde la
función:
if ( array_1[i] < array_1[i-1] )
esto te fuerza a no poder usar la función con otras cadenas, y la
solución es pasar la cadena por medio de un parámetro, para
explicarlo veamos unas llamadas a la función desde main:
int main()
{
// declaro varios arrays para probar la función
int arrayNumerico[] = {1, 3, 5, 7, 9, 0, 8, 6, 4, 2}; // array
de 10 dígitos
char arrayAlfanumerico[] = {'a', '0', 'c', '9', 'b', 'h', '3',
'5', '2', '1'}; // array de 10 caracteres
// llamo a mi función con el primer array de mayor a menor
Ordenar(arrayNumerico, false);
cout << arrayNumerico << endl; // imprimo el array
para ver el resultado
// llamo a mi función con el primer array de menor a mayor
Ordenar(arrayNumerico, true);
cout << arrayNumerico << endl;
// llamo a mi función con el segundo array de mayor a menor
Ordenar(arrayAlfanumerico, false);
cout << arrayAlfanumerico << endl;
// llamo a mi función con el segundo array de menor a mayor
Ordenar(arrayAlfanumerico, true);
cout << arrayAlfanumerico << endl;
}
como se puede observar para que sea útil se debe poder indicar que
array quieres ordenar, además del sentido de ordenación...
luego tienes cosas que arreglar en el código como los bucles, pero
de momento ya es mucho lo que te he dicho, así que animo, sigue
intentándolo y si ves que no te sale simplifica, y hazlo por partes,
por ejemplo, primero ordenando directamente una cadena, cuando veas
que el código funciona, y como funciona, intenta separarlo en la
función, y posteriormente añadir la opción de cambiar el orden de
ordenación, lo importante es entender cada parte de código que
escribas y saber bien lo que hace, para ello ayuda mucho hacer
diagramas de flujo, no te asustes por el nombre tan solo son unos
esquemas gráficos, te dejo un enlace al respecto:
http://www.slideshare.net/bleoav100/algoritmos-y-diagramas-de-f-lujo
espero que algo de esto te sirva de ayuda.
_______________________________________________
Lista de correo Cconclase Cconclase en listas.conclase.net
http://listas.conclase.net/mailman/listinfo/cconclase_listas.conclase.net
Bajas: http://listas.conclase.net/index.php?gid=2&mnu=FAQ
------------ próxima parte ------------
Se ha borrado un adjunto en formato HTML...
URL: <http://listas.conclase.net/pipermail/cconclase_listas.conclase.net/attachments/20130110/abfe1533/attachment.html>
Más información sobre la lista de distribución Cconclase