Witam. Mam zadanie polegające na posortowanie struktury w która przechowuje dane: Imię, Nazwisko, Ocena. Sortowanie ma być według oceny (od oceny najwyższej do najniższej).Nie wiem kompletnie jak się za to zabrać. Proszę o jakieś wskazówki :D
Język C.
0
1
#Napisz strukture.
#Napisz sortowanie.
0
Zacznij od zrozumieniu treści zadania. Strukturę przechowującą "Imię, Nazwisko, Ocena"
nie da się posortować wg oceny.
1
w sensie: nie sortujesz struktury tylko tablicę struktur po ocenie, "sortowanie struktury" nie ma sensu
0
Tak. Chodziło o posortowanie tablicy struktur. Potrafię wczytywać wyświetlać itd. struktury, ale nie wiem jak się zabrać za sortowanie:(
0
Masz te swoje obiekty w tablicy i sortujesz tak jakbyś sortował liczby bo przecież masz dostęp do oceny każdego ucznia.
2
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
typedef struct _Student{
const char *name;
float rate;
} Student;
int cmp_StudentByRate(const void *a, const void *b){
const Student *sa = (const Student *)a,
*sb = (const Student *)b;
return (int)(100.f*sa->rate - 100.f*sb->rate);
}
int cmp_StudentByName(const void *a, const void *b){
const Student *sa = (const Student *)a,
*sb = (const Student *)b;
return strcmp(sa->name, sb->name);
}
void print_students(const Student *students, size_t len){
int i;
for(i = 0; i < len; ++i)
printf("{%s, %g}\n", students[i].name, students[i].rate);
}
int main(void) {
Student students[] = {
{"Marcin Kowalski", 4.5f},
{"Jaro Kowalewski", 1.0f},
{"Narwal Drwal", 3.0f}
};
size_t len = sizeof(students) / sizeof(Student);
qsort(students, len, sizeof(students), cmp_StudentByName);
print_students(students, len);
printf("---\n");
qsort(students, len, sizeof(students), cmp_StudentByRate);
print_students(students, len);
return 0;
}
out:
{Marcin Kowalski, 4.5}
{Jaro Kowalewski, 1}
{Narwal Drwal, 3}
---
{Jaro Kowalewski, 1}
{Narwal Drwal, 3}
{Marcin Kowalski, 4.5}