[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