elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Arreglado, de nuevo, el registro del warzone (wargame) de EHN


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  URGENTE - Ordenar fichero de reales de menor a mayor mirando la primera columna
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: URGENTE - Ordenar fichero de reales de menor a mayor mirando la primera columna  (Leído 1,761 veces)
Nakkuu

Desconectado Desconectado

Mensajes: 4


Ver Perfil
URGENTE - Ordenar fichero de reales de menor a mayor mirando la primera columna
« en: 26 Noviembre 2016, 15:47 pm »

Hola a todos, disculpen ser tan directo, pero llevo semanas comiendome la cabeza.

Estoy trabajando con un proyecto en el que debo, en lenguaje .C NO en C++:

Disponemos de un archivo, "NOTAS.txt", con las notas de los alumnos (25 alumnos) de
todas las clases de un colegio (12 clases). En el archivo, en primer lugar se encuentra el
número de clases, a continuación, para cada clase, el identificativo de la clase (un
valor entero de 1 a 12), y las notas correspondientes a cada alumno (reales). Los datos de
las clases no están ordenados. Cada línea contiene los datos de una clase, con las
notas de cada alumno:

Me pide hacerlo sin usar procedimientos (funciones, acciones) más adelante si.
Esto es lo que necesito para empezar a hacer el programa, más adelante me pide calcular medias, desviación tipica, etc.

Este es el formato del .txt: y aquí el enlace al .txt --> http://ge.tt/6XjDLOh2

12
(clase) (notas) (notas)......(notas)
1 nota1 nota2 nota3 ... nota25\n
4 nota1 nota2 nota3 ... nota25\n
2 nota1 nota2 nota3 ... nota25\n
... (hasta 12)

Leer el archivo y que me lo imprima bien por pantalla lo tengo hecho. Ahora solamente me faltaría ordenar (por filas) las clases, con sus notas respectivas,  las notas no hace falta ordenarlas, es decir, que me quede algo así:

12
(clase) (notas) (notas)......(notas)
1 nota1 nota2 nota3 ... nota25\n
2 nota1 nota2 nota3 ... nota25\n
3 nota1 nota2 nota3 ... nota25\n
... (hasta 12)

He probado utilizar el metodo de la burbuja pero no me lo ordena del todo. A continuación les muestro mi código hasta ahora:

Explico lo que he pensado. En primer lugar fijarme solamente en la primera columna de todas las filas, y comprobar si la posición 0,0 > a la posición [1][0] y así sucesivamente. En segundo lugar si la posición 0,0 es mayor a la [1][0] hacer que se intercambien usando una variable auxiliar de reales.

Les muestro el código hecho hasta ahora:

CÓDIGO:

Código
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <math.h>
  4. #define NOM_FITXER "notes.txt"
  5. #define CLASES 12
  6. #define ALUMNES 26
  7.  
  8. int main()
  9. {
  10.    FILE *f;
  11.    /* int classes[CLASES];*/
  12.    int i, j,k, total_classes=0;
  13.    float taula[CLASES][ALUMNES], aux=0;
  14.  
  15.    f=fopen(NOM_FITXER, "r");
  16.  
  17.    if (f!=NULL)
  18.    {
  19.        printf("El fitxer s'ha obert correctament.\n");
  20.        fscanf(f,"%d",&total_classes);
  21.        printf("%d\n",total_classes);
  22.        if (total_classes==EOF)
  23.        {
  24.            printf("Seq buida");
  25.        }
  26.        else
  27.        {
  28.            while (!feof(f))
  29.            {
  30.                for (i=0; i<12; i++)
  31.                {
  32.                    for (j=0; j<26; j++)
  33.                        fscanf(f,"%f ", &taula[i][j]);
  34.                }
  35.            }
  36.        }
  37.    }
  38.    for (i=0; i<CLASES; i++)
  39.    {
  40.        for (j=i+1; j<CLASES; j++)
  41.        {
  42.            for (k=0; k<ALUMNES; k++)
  43.            {
  44.                if (taula[i][0]>taula[j][0])
  45.                {
  46.                    aux = taula[i][k];
  47.                    taula[i][k]=taula[j][k];
  48.                    taula[j][k]=aux;
  49.                }
  50.            }
  51.  
  52.        }
  53.    }
  54.  
  55.  
  56.  
  57.    for (i=0; i<12; i++)
  58.    {
  59.        printf("%d ",(int)taula[i][0]);
  60.        for (j=1; j<26; j++)
  61.            printf("%.2f ",taula[i][j]);
  62.        printf("\n");
  63.    }
  64.    return 0;
  65. }
  66.  

Aclarar que debo intercambiar filas enteras mirando solamente la primera columna.

Ahora me ordena bien la primera columna, pero me sigue dejando  el resto de filas tal y como estan en el .txt, es decir, me intercambia solamente la primera columna, y quiero que intercambie la fila entera.

Pongo un ejemplo de mi .txt:

12
1 6.63 0.71 4.70 4.51 1.55 .....
3 2.34 7.60 1.17 3.03 3.83 .....
10 6.88 0.21 7.80 3.30 8.65 .....
2 9.27 2.01 4.76 0.18 0.69 .....
4 9.31 3.16 1.96 6.35 0.27 .....
12 1.09 3.51 2.03 2.85 1.33 .....
5 3.42 4.63 1.80 8.73 5.84 .....
8 5.15 1.50 9.06 2.29 5.15.....
9 4.73 0.77 2.06 4.73 4.78 .....
6 9.57 7.61 3.20 5.61 6.03 .....
7 3.62 5.56 8.85 6.03 3.50.....

Me devuelve esto:

12
1 6.63 0.71 4.70 4.51 1.55 .....
2 2.34 7.60 1.17 3.03 3.83 .....
3 6.88 0.21 7.80 3.30 8.65 .....
4 9.27 2.01 4.76 0.18 0.69 .....
5 9.31 3.16 1.96 6.35 0.27 .....
6 1.09 3.51 2.03 2.85 1.33 .....
7 3.42 4.63 1.80 8.73 5.84 .....
8 5.15 1.50 9.06 2.29 5.15.....
9 4.73 0.77 2.06 4.73 4.78 .....
10 9.57 7.61 3.20 5.61 6.03 .....
11 3.62 5.56 8.85 6.03 3.50.....
12 3.73 2.96 2.79 4.39 3.03....


Gracias por todos a los que intenten colaborar con esto.

He conseguido, tras multiples peleas con mi ordenador, solucionar mi ejercicio por completo. Una vez ordenado el fichero me calcula la mediana, la desviación tipica y lo escribo en un fichero resultados.txt donde en la segunda columna incluyo las desviaciones.

Si alguien está interesado en que cuelgue o le envie el código que tan solo responda en este post.

Tema concluido.


« Última modificación: 28 Noviembre 2016, 16:57 pm por Nakkuu » En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
programa en vb (ordenar de mayor a menor)
Programación Visual Basic
jjam45 1 9,549 Último mensaje 19 Febrero 2006, 18:36 pm
por jjam45
Ordenar número de mayor a menor « 1 2 »
Programación Visual Basic
Nessito 14 16,243 Último mensaje 19 Mayo 2007, 20:09 pm
por Nessito
ordenar de mayor a menor 5 numeros ingresados x el teclado!!!
ASM
XxArCaNgElxX 0 19,248 Último mensaje 20 Mayo 2011, 21:19 pm
por XxArCaNgElxX
ayuda compañeros! programa c ordenar mayor a menor « 1 2 »
Programación C/C++
shikidos 11 11,581 Último mensaje 19 Enero 2015, 05:41 am
por engel lex
Ordenar valores de menor a mayor en una LisBox
.NET (C#, VB.NET, ASP)
Usuario 202 5 8,875 Último mensaje 16 Junio 2016, 23:42 pm
por Eleкtro
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines