173 lines
3.8 KiB
C
173 lines
3.8 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){
|
|
//printf ("A: %c B: %c\n",a->name[i],b->name[i]);
|
|
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]){
|
|
//printf (" MENIM A: %c B: %c\n",a->name[i],b->name[i]);
|
|
return 1;
|
|
}
|
|
else if(a->name[i] < b->name[i]){
|
|
//printf ("NEMENIM A: %c B: %c\n",a->name[i],b->name[i]);
|
|
return -1;
|
|
}
|
|
else{
|
|
i++;
|
|
}
|
|
|
|
}
|
|
return 0;
|
|
}
|
|
}
|
|
|
|
|
|
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;
|
|
}
|
|
}
|
|
} |