test
This commit is contained in:
commit
177d370b6f
12
Makefile
Normal file
12
Makefile
Normal file
@ -0,0 +1,12 @@
|
|||||||
|
CFLAGS= -c -g -Wall -std=c99
|
||||||
|
|
||||||
|
all: anketa
|
||||||
|
|
||||||
|
%.o: %.c
|
||||||
|
gcc $(CFLAGS) $< -o $@
|
||||||
|
|
||||||
|
clean:
|
||||||
|
rm *.o anketa
|
||||||
|
|
||||||
|
anketa: anketa.o main.o
|
||||||
|
gcc anketa.o main.o -o anketa
|
75
anketa.c
Normal file
75
anketa.c
Normal file
@ -0,0 +1,75 @@
|
|||||||
|
#include "anketa.h"
|
||||||
|
#include <stdlib.h>
|
||||||
|
#include <string.h>
|
||||||
|
#include <assert.h>
|
||||||
|
|
||||||
|
int count_students(struct student* students){
|
||||||
|
int x=0;
|
||||||
|
for(int i=0; i<MAXSTUDENTS; i++){
|
||||||
|
if(students[i].name!=NULL){
|
||||||
|
x++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return x;
|
||||||
|
}
|
||||||
|
|
||||||
|
int search(struct student* students,const char* name){
|
||||||
|
int index=-1;
|
||||||
|
for(int i=0; i<MAXSTUDENTS; i++){
|
||||||
|
if(strcmp(students[i].name,name)==0){
|
||||||
|
index=i;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return index;
|
||||||
|
}
|
||||||
|
|
||||||
|
int add_student(struct student* students, const char* name, int votes){
|
||||||
|
int index=-1, x=0;
|
||||||
|
for(int i=0; i<MAXSTUDENTS; i++){
|
||||||
|
if(strcmp(students[i].name,name)==0){
|
||||||
|
index=i;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
if(students[i].name!=NULL){
|
||||||
|
x++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if(index!=-1){
|
||||||
|
students[index].votes+=votes;
|
||||||
|
return index;
|
||||||
|
}
|
||||||
|
|
||||||
|
if(x<(MAXSTUDENTS-1)){
|
||||||
|
strcpy(students[x].name,name);
|
||||||
|
students[x].votes=votes;
|
||||||
|
return x;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
int compare(const void* s1,const void* s2){
|
||||||
|
struct student* stud1=(struct student*)s1;
|
||||||
|
struct student* stud2=(struct student*)s2;
|
||||||
|
return stud1->votes==stud2->votes?0:stud1->votes<stud2->votes?1:-1;
|
||||||
|
}
|
||||||
|
|
||||||
|
void sort_students(struct student* students){
|
||||||
|
qsort(students, count_students(students), sizeof(struct student), compare);
|
||||||
|
}
|
||||||
|
|
||||||
|
void print_students(struct student* students){
|
||||||
|
for(int i=0;i<MAXSTUDENTS;i++){
|
||||||
|
if(students[i].name!=NULL){
|
||||||
|
printf("%s\n %d\n", students[i].name, students[i].votes);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void read_students(FILE* file,struct student* students){
|
||||||
|
|
||||||
|
}
|
||||||
|
|
95
anketa.h
Normal file
95
anketa.h
Normal file
@ -0,0 +1,95 @@
|
|||||||
|
#ifndef ANKETA_H
|
||||||
|
#define ANKETA_H
|
||||||
|
/**
|
||||||
|
* Veľkosť buffra pre načítanie reťazcov
|
||||||
|
* a maximálna veľkosť mena.
|
||||||
|
*/
|
||||||
|
#define BUFSIZE 100
|
||||||
|
/**
|
||||||
|
* Maximálna veľkosť databázy
|
||||||
|
*/
|
||||||
|
#define MAXSTUDENTS 50
|
||||||
|
|
||||||
|
#include <stdio.h>
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Jedna položka v databáze
|
||||||
|
* Neplatná položka je taká ktorá má počet hlasov 0 alebo meno je prázdny reťazec.
|
||||||
|
*/
|
||||||
|
struct student {
|
||||||
|
// Meno študenta
|
||||||
|
char name[BUFSIZE];
|
||||||
|
// Počet získaných hlasov
|
||||||
|
int votes;
|
||||||
|
};
|
||||||
|
/**
|
||||||
|
* Spočítanie platných položiek v databáze.
|
||||||
|
* Databáza je ukončená prvou neplatnou položkou alebo koncom poľa.
|
||||||
|
* Maximálny počet položiek je MAXSTUDENTS.
|
||||||
|
*
|
||||||
|
* @return nezáporný počet platných položiek.
|
||||||
|
*/
|
||||||
|
int count_students(struct student* students);
|
||||||
|
/**
|
||||||
|
* Vyhľadanie záznamu s daným menom v databáze.
|
||||||
|
* Databáza je ukončená prvou neplatnou položkou alebo koncom poľa.
|
||||||
|
*
|
||||||
|
* @param pole záznamov
|
||||||
|
* @param meno na vyhľadanie
|
||||||
|
* @return Index prvého záznamu, ktorý má dané meno. -1 ak sa v poli taký záznam nenachádza.
|
||||||
|
*/
|
||||||
|
int search(struct student* students,const char* name);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Porovnanie dvoch položiek v databáze podľa počtu hlasov.
|
||||||
|
*
|
||||||
|
* @return Nula v prápade, že sú položky rovnaké. Kladná hodnota v prípade, že počet hlasov prvej položky je menší ako počet hlasov druhej položky. Záporná hodnota inak.
|
||||||
|
*/
|
||||||
|
int compare(const void* s1,const void* s2);
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Pridanie novej informácie do databázy.
|
||||||
|
*
|
||||||
|
* Ak sa meno v poli už nachádza, funkcia zvýši počet hlasov pre danú položku.
|
||||||
|
* Ak sa meno v databáze nenachádza, funkcia vytvorí nový záznam na prvom voľnom mieste od začiatku.
|
||||||
|
*
|
||||||
|
* @param pole záznamov
|
||||||
|
* @param meno na pridanie
|
||||||
|
* @param početnosť na pridanie
|
||||||
|
* @return index, kde bola položka pridaná. -1 ak nebolo v poli dosť miesta.
|
||||||
|
*/
|
||||||
|
int add_student(struct student* students, const char* name, int votes);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Zotriedenie všetkých záznamov podľa počtu hlasov.
|
||||||
|
* Databáza je ukončená prvou neplatnou položkou alebo koncom poľa.
|
||||||
|
*
|
||||||
|
* @param pole na zotriedenie.
|
||||||
|
*/
|
||||||
|
void sort_students(struct student* students);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Výpis všetkých záznamov na štandardný výstup.
|
||||||
|
* Databáza je ukončená prvou neplatnou položkou alebo koncom poľa.
|
||||||
|
*
|
||||||
|
* @param pole na výpis
|
||||||
|
*/
|
||||||
|
void print_students(struct student* students);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Načítanie záznamov z otvoreného súboru do poľa.
|
||||||
|
*
|
||||||
|
* Funkcia načíta maximálne MAXSTUDENTS záznamov, potom skončí.
|
||||||
|
* Načítanie skončí aj v prípade načítania neplatnej položky.
|
||||||
|
* Jedna položka v textovom súbore je vo formáte:
|
||||||
|
*
|
||||||
|
* meno
|
||||||
|
* početnosť
|
||||||
|
*
|
||||||
|
* @param otvorený súbor. Otvorený súbor je rovný stdin v prípade načítania zo štandardného vstupu.
|
||||||
|
* @param pole kam sa uložia výsledky.
|
||||||
|
*/
|
||||||
|
void read_students(FILE* file,struct student* students);
|
||||||
|
|
||||||
|
#endif
|
16
main.c
Normal file
16
main.c
Normal file
@ -0,0 +1,16 @@
|
|||||||
|
#include "anketa.h"
|
||||||
|
#include <string.h>
|
||||||
|
|
||||||
|
int main(){
|
||||||
|
struct student students[MAXSTUDENTS];
|
||||||
|
memset(students,0,sizeof(struct student)*(MAXSTUDENTS));
|
||||||
|
read_students(stdin,students);
|
||||||
|
int sz = count_students(students);
|
||||||
|
if (sz <= 0){
|
||||||
|
// Nenacitalo sa nic
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
sort_students(students);
|
||||||
|
print_students(students);
|
||||||
|
return 0;
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user