[C con Clase] ayuda por favor
Steven Davidson
srd4121 en njit.edu
Sab Abr 28 23:44:15 CEST 2012
Hola Juan Carlos,
On 4/28/2012 9:28 AM, juan carlos gomez isaza wrote:
> amigos es que no tengo mucho manejo sobre programación y para el
> lunes tenemos que entregar el programa que aquí les dejo pero
> orientado a objetos, les agradecería si me pudieran colaborar. de
> verdad necesita de su ayuda ya que voy mal en esa materia... por
> favor me toca entregarlo el lunes. les agradezco.
>
Te comento acerca del código fuente y luego acerca de lo que tienes que
hacer para que tú mismo puedas hacer este programa usando POO.
>
> #include<stdio.h>
No necesitas este fichero de cabecera porque no usas ninguna función
declarada en ello.
> #include<conio.h>
> #include<stdlib.h>
> #include<string.h>
No necesitas este fichero de cabecera porque no usas ninguna función
declarada en ello.
> #include<iostream.h>
>
Estos nombres no son los estándares en C++, pero sí los son en
compiladores MUY antiguos. Si puedes cambiar de compilador, lo
recomiendo - y mucho. Los nombres correctos son:
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <iostream>
using namespace std; // Para usar 'std' implícitamente
El fichero de cabecera <conio.h> NO es estándar, aunque era popular,
especialmente con Turbo C/C++. Aconsejo no usar la biblioteca "conio",
ya que estás aprendiendo el lenguaje.
Si por alguna razón, de la universidad o del profesor, no puedes cambiar
de compilador, bueno, pues qué se le va a hacer.
> int Num[20],i,T,N,j;
No es NADA recomendable usar variables globales. Define estas variables
localmente, en 'main()'.
> void main (void)
Esto en C, funcionaba bien, pero ya no, y desde luego no es estándar en
C++. La función 'main()' DEBE retornar 'int'. En C++, no es necesario
indicar 'void' para una lista vacía de parámetros; simplemente no
escribas nada. Esto es,
int main()
{
...
return 0;
}
Retornamos 0 (cero) para indicar que el programa terminó con éxito.
> {
> clrscr();
> cout<<"\nCuantos numeros a ordenar: ";
> cin>>N;
> for(i=0;i<N;i++)
> {
> cout<<"Dame el numero "<<i+1<<" ";
> cin>>Num[i];
> }
> cout<<"Presiona enter para continuar....";
> getch();
>
> for(i=0;i<=N;i++)
Esto es incorrecto, ya que usas 'i' como índice para el array. Como
sabes, los índices SIEMPRE empiezan por 0 (cero). Esto significa que la
cota superior del índice será N-1.
Escribe:
for( i=0; i < N; i++ )
> {
> for(j=i+1;j<=N;j++)
Nuevamente, 'j' es un índice y su cota superior es 'N-1', que podemos
implementar la idea escribiendo:
for( j=i+1; j < N; j++ )
> {
> if(Num[j]>Num[i])
> {
> T=Num[i];
> Num[i]=Num[j];
>
> Num[j]=T;
> }
>
>
> }
> }
>
Aquí intentas ordenar de mayor a menor, pero no es correcto. Tienes que
comprobar parejas contiguas de elementos varias veces. Esto sería,
1. Por cada pasada de 1 a N-1, hacer
2. Para i <- 0 hasta N-2, hacer
3. Si lista[i] > lista[i+1], entonces
4. Intercambiar: lista[i] y lista[i+1]
5. Terminar.
No hace falta realizar N pasadas, sino N-1.
Aconsejo que consultes el capctulo 10 de nuestro curso de C++ acerca de
este método de la Burbuja para ordenar arrays:
http://c.conclase.net/curso/index.php?cap=010#Array_burbuja También
puedes consultar el capítulo 1 de nuestro curso de Algoritmo de
Ordenación yendo a: http://c.conclase.net/orden/?cap=burbuja#inicio
>
> for(i=N-1;i>=0;i--)
> {
> cout<<Num[i]<<","<<endl;
>
Esto parece más un "truco" para mostrar el orden inverso. Si requieres
el sentido inverso de la ordenación previa, entonces haber ordenado el
array en ese sentido.
>
> }
>
> getch();
> }
>
No estoy entendiendo cómo quieres cambiar este programa a POO, ya que la
POO no es necesaria en este caso.
Si de verdad necesitas hacer un programa usando la POO, podrías
representar una lista de enteros como una clase y luego definir las
tareas de acceder a un elemento, ordenar la lista, y mostrar la lista
como funciones miembro. Por ejemplo,
class ListaEnteros
{
private:
int aEnteros[20];
int nCantActual; // Cantidad Actual de elementos
public:
ListaEnteros();
...
};
Te dejo que escribas el resto. Nuevamente, no me parece adeucado aplicar
la POO en este problema tan simple.
Espero que todo esto te oriente.
Steven
Más información sobre la lista de distribución Cconclase