usaa19cv3/program.c

168 lines
3.6 KiB
C

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define LINE_SIZE 100
#define LIST_SIZE 20
struct pizza{
char name[LINE_SIZE];
float prize;
};
int read_item(struct pizza* item);
int read_pizza_list(struct pizza* list);
int compare_pizza(const void * left, const void * right) {
const struct pizza * a = (const struct pizza *) left;
const struct pizza * b = (const struct pizza *) right;
if (a->prize > b->prize){
return 1;
}
else if (a->prize < b->prize){
return -1;
}
else{
int i=0;
while(1){
if(a->name[i]=='\n' || b->name[i]=='\n'){
break;
}
else if(a->name[i]=='\r' || b->name[i]=='\r'){
break;
}
else if(a->name[i] > b->name[i]){
return 1;
}
else{
i++
}
}
return -1;
}
}
int main(int argc, char *argv[]) {
struct pizza list[LIST_SIZE];
memset(list,0,LIST_SIZE*sizeof(struct pizza));
int counter = 0;
for (int i=0; i< LIST_SIZE; i++){
struct pizza item;
memset(&item,0,sizeof(struct pizza));
// Nacitajte polozku do pomocnej premennej
// Na nacitanie pouzite vlastny kod
int r = read_item(&item);
if (r){
// Ak sa nacitanie podarilo, skopirujte polozku do pola
memcpy(&list[i],&item,sizeof(struct pizza));
// Spocitame uspesne nacitane polozky
counter += 1;
}
else{
// Ak sa nacitanie nepodarilo, nasli sme poslednu polozku
// Prerusim nacitanie
break;
}
}
qsort (list, counter, sizeof(struct pizza), compare_pizza);
int i=0;
for (i = 0; i < counter; i++) {
printf("%s%.6f\n", list[i].name, list[i].prize);
}
return 0;
}
int read_item(struct pizza* item){
char line[LINE_SIZE];
char line2[LINE_SIZE];
memset(line,0,LINE_SIZE);
memset(line2,0,LINE_SIZE);
while (1){
char *r = fgets(line,LINE_SIZE,stdin);
if(r != NULL && line[1] != 0){
int i=0;
//printf("%s",line);
while(line[i]!='\n' || line[i]!='\r'){
if(line[i]=='\n'){
//printf("Koniec n riadku\n");
break;
}
else if(line[i]=='\r'){
//printf("Koniec r riadku\n");
break;
}
else if((line[i]>='a' && line[i]<='z') || (line[i]>='A' && line[i]<='Z') || line[i]==' ' || line[i]=='-'){
//printf("%c\n",line[i]);
i++;
}
else{
//printf("NeplatnĂ˝ znak %c\n",line[i]);
return 0;
}
}
i=0;
char *r2 = fgets(line2,LINE_SIZE,stdin);
if(r2 != NULL && line2[1] != 0){
int i=0;
int comma=0;
int comma_number=0;
//printf("%s",line);
while(line2[i]!='\n' || line2[i]!='\r' || line2[i]!='\0'){
if(line2[i]=='\n'){
//printf("Koniec n riadku\n");
break;
}
else if(line2[i]=='\r'){
//printf("Koniec r riadku\n");
break;
}
else if(line2[i]=='\0'){
//printf("Koniec r riadku\n");
break;
}
else if((line2[i]>='0' && line2[i]<='9') || line2[i]=='.'){
//printf("%c\n",line[i]);
if(line2[i]=='.'){
comma++;
}
if(line2[i]!='.' && comma){
comma_number++;
}
i++;
}
else{
//printf("NeplatnĂ˝ znak %c\n",line[i]);
return 0;
}
}
i=0;
//printf("Comma %d\n",comma);
//printf("Comma number %d\n",comma_number);
if(comma>1)return 0;
if(comma_number>2)return 0;
float value = strtof(line2,NULL);
if (value == 0.0F){
return 0;
}
item->prize = value;
strcpy(item->name, line);
return 1;
}
else{
return 0;
}
}
else{
return 0;
}
}
}