Foros del Web » Programación para mayores de 30 ;) » C/C++ »

Problema de arreglos

Estas en el tema de Problema de arreglos en el foro de C/C++ en Foros del Web. Hola amig@s... bueno, especificamente mucho de C++ no lo se, por eso vengo por un poquito de ayuda. El problema consiste en un ordenamiento, pero ...
  #1 (permalink)  
Antiguo 21/11/2006, 23:41
 
Fecha de Ingreso: julio-2005
Ubicación: Guatemala
Mensajes: 165
Antigüedad: 19 años, 3 meses
Puntos: 0
Problema de arreglos

Hola amig@s... bueno, especificamente mucho de C++ no lo se, por eso vengo por un poquito de ayuda.

El problema consiste en un ordenamiento, pero logro ordenar completo cualquier vector que sea de tipo int, pero no se como hacerle para el de tipo char.

La cosa es que necesito ingresar 40 nombres, y colocar sus notas y carnet, los ultimos 2 (notas y carnet) lo logro hacer bien, pero el de nombre que es el unico tipo char... PROBLEMAS!!!

Les pongo el codigo para ver en que me pueden ayudar... (copien el codigo en sus editores e intenten correrlo a ver que pasa).

Código PHP:
#include <iostream.h>;
#include <stdio.h>;
#include <string.h>;
#include <conio.h>;

#include <limits.h>;

    
char nombres[1][50],nombres_tmp[1][50];;
   
int carnets[50], carnets_tmp[50], n_tmp[50], notas[50], notas_tmp[50];
   
int i;

//FUNCION 1 DE INGRESAR
void ingresar()
{
  
int j,c;
  
clrscr();
  
cout<<"Cuantos alumnos desea ingresar:"<<endl;
  
cin>>i;
  
c=1;
  for(
j=1j<=ij++)
  {
    
cout<<endl<<"Ingrese el nombre del alumno #"<<j<<":"<<c<<endl;
    
cin>>nombres[j];
    
cout<<"Ingrese el numero de carnet del alumno #"<<j<<":"<<endl;
    
cin>>carnets[j];
    
cout<<"Ingrese la nota del alumno #"<<j<<":"<<endl;
    
cin>>notas[j];
    
n_tmp[j]=c;
    
c=c+1;
  }
}

//FUNCION 2, PARA DESPLEGAR DATOS INGRESADOS
void ver_informacion()
{
  
clrscr();
  
int j;
  
cout<<"NOMBRE                  "<<"CARNET                "<<"NOTA"<<endl;
  for(
j=1j<=ij++)
  {
        
cout<<nombres[j]<<"            "<<carnets[j]<<"           "<<notas[j]<<endl;
  }
  
getch();
}

//FUNCION 3, ORDERNAR POR NOMBRE
void ordenar_nombre()
{
  
clrscr();
  
int j,z,w,aux1;
  
char nombre;
  
int n_tmps[50];
  for(
z=1z<=iz++)
  {
      
nombres_tmp[z]=nombres[z];
      
n_tmps[z]=n_tmp[z];
      
carnets_tmp[z]=carnets[z];
      
notas_tmp[z]=notas[z];
  }
  for (
z=1z<=i-1z++)
  {
          for (
w=z+1w<=iw++)
      {
          if (
nombres_tmp[z]<nombres_tmp[w])
         { 
ATENCION, QUE AQUI ES DONDE ESTA EL PROBLEMA... la variable aux1 es la que funciona como auxiliar para el intercambio de valores tipo int, y nombre es la que haria la misma funcion pero para los valores char (nombre)... el detalle es que no se como declarar la "bendita" variable nombre, o talvez (es muy probable) no la este declarando correctamente bien al inicio.

Código PHP:
            //ORDERNAR POR NOMBRES
            
nombre=nombres_tmp[z];
            
nombres_tmp[z]=nombres_tmp[w];
            
nombres_tmp[w]=nombre;

            
//ORDENAR CARNETS
            
aux1=carnets_tmp[z];
            
carnets_tmp[z]=carnets_tmp[w];
            
carnets_tmp[w]=aux1;

            
//ORDENAR NOTAS
            
aux1=notas_tmp[z];
            
notas_tmp[z]=notas_tmp[w];
            
notas_tmp[w]=aux1;
         }
      }
  }
  
cout<<"NOMBRE                  "<<"CARNET                "<<"NOTA"<<endl;
  for(
j=1j<=ij++)
  {
        
cout<<nombres[n_tmps[j]]<<"            "<<carnets_tmp[j]<<"           "<<notas_tmp[j]<<endl;
  }
  
getch();
}

//FUNCION PRINCIPAL
void main()
{
    
int opcion=0;
   while (
opcion != 12)
   {
      
clrscr();
      
cout<<"PROGRAMA REALIZADO POR:"<<endl;
      
cout<<"Bilkar M. Morataya Molina"<<endl;
      
cout<<"Carne: 90-06-2810"<<endl<<endl;
      
cout<<"1. Ingresar Datos"<<endl;
       
cout<<"2. Desplegar información"<<endl;
       
cout<<"3. Ordenamiento por nombre (ascendente)"<<endl;
      
cout<<"4. Ordenamiento por nota (descendente)"<<endl;
       
cout<<"5. Eliminar por nombre"<<endl;
      
cout<<"6. Eliminar por carnet"<<endl;
      
cout<<"7. Buscar por canet"<<endl;
      
cout<<"8. Nota maxima"<<endl;
      
cout<<"9. Nota minima"<<endl;
      
cout<<"10. Promedio de notas"<<endl;
       
cout<<"11. Reporte en archivo"<<endl;
      
cout<<"12. Salir"<<endl<<endl;
       
cin>>opcion;
      
//OPCION 1, INGRESAR DATOS
       
if (opcion==1ingresar();

      
//OPCION 2, VER DATOS
       
if (opcion==2ver_informacion();

       
//OPCION 3,
       
if (opcion==3ordenar_nombre(); 
__________________
Guatemala - Guatemala
  #2 (permalink)  
Antiguo 22/11/2006, 08:05
 
Fecha de Ingreso: abril-2005
Mensajes: 3.083
Antigüedad: 19 años, 7 meses
Puntos: 17
Un consejo si quieres que te ayuden en este foro: Elimina <conio.h> y borra todas las funciones que te diga que no existan, como clrscr().
  #3 (permalink)  
Antiguo 22/11/2006, 08:08
 
Fecha de Ingreso: julio-2005
Ubicación: Guatemala
Mensajes: 165
Antigüedad: 19 años, 3 meses
Puntos: 0
Gracias!

Gracias por el consejo, aunque eso no me esta dando todo el problema realmente, sino el problema es hacer el metodo de burbuja para ordenamiento, y especificamente el problema es en la variable que se usara como auxiliar en el metodo burbuja...

Como declaro correctamente el vector, y como la variable auxiliar?

Gracias, saludos.
__________________
Guatemala - Guatemala
  #4 (permalink)  
Antiguo 22/11/2006, 08:14
 
Fecha de Ingreso: abril-2005
Mensajes: 3.083
Antigüedad: 19 años, 7 meses
Puntos: 17
Cita:
Iniciado por bilkarm3 Ver Mensaje
Gracias por el consejo, aunque eso no me esta dando todo el problema realmente, sino el problema es hacer el metodo de burbuja para ordenamiento, y especificamente el problema es en la variable que se usara como auxiliar en el metodo burbuja...

Como declaro correctamente el vector, y como la variable auxiliar?

Gracias, saludos.
Sé que ése no es el problema, pero el caso es que si usas conio.h estás usando código NO ESTÁNDAR.

Por otra parte, hay mil incorrecciones en tu código con respecto a los #include, variables globales, arrays estáticos, declaración de main()...
  #5 (permalink)  
Antiguo 22/11/2006, 08:17
 
Fecha de Ingreso: julio-2005
Ubicación: Guatemala
Mensajes: 165
Antigüedad: 19 años, 3 meses
Puntos: 0
Ok

Ok, gracias nuevamente.

Que me sugieres, talvez tengas ya algo hecho para verlo y estudiarlo.

Como hago para ordenar un vector o en todo caso un struct de 40 nombres, ordernarlo por nombre de manera A hasta la Z?

Gracias.
__________________
Guatemala - Guatemala
  #6 (permalink)  
Antiguo 22/11/2006, 08:25
 
Fecha de Ingreso: abril-2005
Mensajes: 3.083
Antigüedad: 19 años, 7 meses
Puntos: 17
Cita:
Iniciado por bilkarm3 Ver Mensaje
Ok, gracias nuevamente.

Que me sugieres, talvez tengas ya algo hecho para verlo y estudiarlo.

Como hago para ordenar un vector o en todo caso un struct de 40 nombres, ordernarlo por nombre de manera A hasta la Z?
Pues en tu caso no lo sé, con cosas como estas: "char nombres[1][50];" me pierdo.
  #7 (permalink)  
Antiguo 22/11/2006, 08:29
 
Fecha de Ingreso: julio-2005
Ubicación: Guatemala
Mensajes: 165
Antigüedad: 19 años, 3 meses
Puntos: 0
Problema

Si, mira, el detalle es que para ordenar numeros no tengo ningun problema, donde se me complica todo, es cuando quiero ordenar algo que no es numerico, ejemplo: NOMBRES, debido a que las variables char deben ser medio raras ya que me da errores como: convert 'char *' to 'char' y cuando hago el cambio me dice luego 'require Lvalue'

No sabes donde puedo buscar o si tienes algun codigo como para ingresar 10 nombres a un vector (ingreso en desorden) y que luego ordene ese mismo vector por orden alfabetico?

Gracias.
__________________
Guatemala - Guatemala
  #8 (permalink)  
Antiguo 22/11/2006, 15:35
 
Fecha de Ingreso: abril-2005
Mensajes: 3.083
Antigüedad: 19 años, 7 meses
Puntos: 17
Cita:
Iniciado por bilkarm3 Ver Mensaje
Si, mira, el detalle es que para ordenar numeros no tengo ningun problema, donde se me complica todo, es cuando quiero ordenar algo que no es numerico, ejemplo: NOMBRES, debido a que las variables char deben ser medio raras ya que me da errores como: convert 'char *' to 'char' y cuando hago el cambio me dice luego 'require Lvalue'

No sabes donde puedo buscar o si tienes algun codigo como para ingresar 10 nombres a un vector (ingreso en desorden) y que luego ordene ese mismo vector por orden alfabetico?

Gracias.
En Google dicen que se encuentra de todo, pero no soy experto en eso...
  #9 (permalink)  
Antiguo 22/11/2006, 17:51
Avatar de Instru  
Fecha de Ingreso: noviembre-2002
Ubicación: Mexico
Mensajes: 2.751
Antigüedad: 22 años
Puntos: 52
Vale, un poco de ayuda.
Una idea que se me ocurre de repente seria usar una lista enlazada.
y pues que tengas una funcion que vaya construyendo poco a poco esa lista, asi puedes ir metiendo nombres en medio al final y al principio.

Seri namas cuestion de ir comparando las letras e ir asignando un lugar.
No se, es imaginarte algun sistema, con numeros, o no se, el chsite es que tu te entiendas con ese mini sistema para poder hacer tus funciones que hagan la lista enlazada.

Es solo una idea

saludos
  #10 (permalink)  
Antiguo 30/11/2006, 03:33
 
Fecha de Ingreso: abril-2006
Ubicación: Acapulco Gro. México
Mensajes: 483
Antigüedad: 18 años, 7 meses
Puntos: 2
bueno, ademas de lo comentado. creo que tienes que leer un poco mas osbre el manejo de cadenas en C o de la clase string en C++, segun quieras usar.

para manipular varias cadenas tienes que deckara un array de arrays.

ejemplo:

char nombres[20][40];
esta es una matriz de caracterres que se puede usar para almacenar un total de 20 nombres con un maximo de 40 caracteres cada uno.

para compara cadenas se usa la funcion strcmp(cad1, cad2);
el resultado de esta funion es 1 si cad1 es mayor que cad2, 0 si cad1 es igual a cad2 y -1 si cad1 es menor a cad2.

para asignar una cadena a otra (a un array) se usa la funcion strcpy(caddestino, cadorigen);

bueno si entendí tu problema eso sería lo basico para ordenar nombres.
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta

SíEste tema le ha gustado a 1 personas (incluyéndote)




La zona horaria es GMT -6. Ahora son las 13:56.