[C con Clase] Funciones
Antonio Arjona
antonio.arjona.melches en gmail.com
Mie Ene 9 08:22:38 CET 2013
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.nachocabanes.com/c/curso/cc03.php>http://www.slideshare.net/bleoav100/algoritmos-y-diagramas-de-f-lujo
espero que algo de esto te sirva de ayuda.
------------ próxima parte ------------
Se ha borrado un adjunto en formato HTML...
URL: <http://listas.conclase.net/pipermail/cconclase_listas.conclase.net/attachments/20130109/fd357dfa/attachment.html>
Más información sobre la lista de distribución Cconclase