makson41k@vk
29-05-2012, 19:23
В некоторых видах спортивных состязаний выступление каждого спортсмена оценивается несколькими судьями(в моем случае 5 судей),затем из всей совокупности оценок удаляются наиболее высокая и наиболее низкая,а для оставшихся оценок вычисляется среднее арифметическое,которое и идет в зачет спортсмену.Если наиболее высокую оценку выставило несколько судей,то удаляется только 1 такая оценка,аналогично и с наиболее низкими.
Программа выдает несколько ошибок,а точнее 5.
Пожалуйста,помогите мне.
#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
#include <string.h>
int i;
struct a
{ char fio[25];
char oc[5];
};
struct in
{ char oc[5];};
int max,min,imax[20],imin[20],p,j,k=0;
float sum[20];
FILE *f;
void input ()
{ clrscr();
char s;
a sp;
f = fopen ("sp.txt", "rb+");
if (f)
{ do
{ fflush (stdin);
printf ("\n1 - Создать файл заново\n");
printf ("2 - Добавить данные в существующий файл\n");
printf ("3 - Отказаться от ввода*\n");
printf ("\n");
s = getchar();
if (s == '1')
f = fopen ("sp.txt", "wb+");
else
if (s == '2')
{f = fopen ("sp.txt", "ab+");
{while(!feof(f))
{fread(&sp[k],sizeof(a),1,f); //Cannot convert 'a' to 'int'
k++;} Invalid indirection
k--;}
while (s != '1' && s != '2' && s != '3');
} else f = fopen ("sp.txt", "wb+");
if (s != '3')
{ do
{ fflush (stdin);
clrscr();
printf ("Введите данные о спортсменах\n");
printf ("\nФамилия:\n");
gets (sp.fio);
i=1;
printf ("\nОценки:\n");
for(j=0;j<5;j++)
scanf("%s",sp.oc[j]);
fflush (stdin);
fwrite (&sp, sizeof(sp), 1, f);
k++;
printf ("\nПродолжить ввод? [д/н*]\n");
fflush (stdin);
s = getchar();
} while (s == 'д'|| s == 'Д');
fclose (f);
}
}
void osn () //do statement must have while
{ clrscr();
f = fopen ("sp.txt", "rb");
in sp;
for(j=0;j<k;j++)
{max=0;min=50;sum[j]=0;
for(i=0;i<5;i++)
{if(sp[j].oc[i]>max)
{max=sp[j].oc[i];
imax[j]=i;
}
if(sp[j].oc[i]<min)
{min=sp[j].oc[i];
imin[j]=i;
}
sum[j]+=sp[j].oc[i];
}
sum[j]=(sum[j]-sp[j].oc[imax]-sp[j].oc[imin])/3;
}
close (f);
}
void cht ()
{ clrscr();
f = fopen ("sp.txt", "rb");
a sp;
float sum[20];
int j;
printf("--------------- Таблица спортсменов ---------------");
while (feof(f)==0)
{
if (fread(&sp,sizeof(sp),1,f))
printf("\n %d %s %f ",i,sp.fio,sum[j]);
}
printf("\n---------------------------------------------------------");
getch();
fclose (f);
}
void edit ()
{ clrscr();
char s; char txt [25];
a sp;
f = fopen ("sp.txt", "ab+");
if (f)
do
{ clrscr ();
printf ("Введите фамилию спортсмена для редактирования данных\n");
fflush (stdin);
gets (txt);
rewind (f);
clrscr();
while (fread (&sp, sizeof(sp), 1, f))
if (strcmp (txt, sp.fio) == 0)
{ printf ("Введите новые данные спортсмена**\n");
printf ("\nФамилия:\n");
gets (sp.fio);
fflush (stdin);
printf ("\nОценки:\n");
for(j=0;j<5;j++)
scanf("%s",sp.oc[j]);
fflush (stdin);
fwrite (&sp, sizeof(sp), 1, f);
}
printf ("\nПродолжить редактирование? [д/н*]\n");
fflush (stdin);
s = getchar();
} while (s == 'д'|| s == 'Д');
else
{ printf ("Файл не существует! Нажмите любую клавишу\n");
getch();
}
fclose (f);
}
void main ()
{ clrscr();
char s;
do
{ clrscr();
printf ("Выберите действие:\n");
printf ("\n1 - Ввод данных\n");
printf ("2 - Редактировать данные\n");
printf ("3 - Прочесть файл\n");
printf ("4 -Выход\n");
printf ("\n");
s = getchar();
switch (s)
{ case '1': input (); break;
case '2': edit (); break;
case '3': cht (); break;
}
} while (s != '4');
getch ();
} //Пишет что пропущена пара скобок
Программа выдает несколько ошибок,а точнее 5.
Пожалуйста,помогите мне.
#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
#include <string.h>
int i;
struct a
{ char fio[25];
char oc[5];
};
struct in
{ char oc[5];};
int max,min,imax[20],imin[20],p,j,k=0;
float sum[20];
FILE *f;
void input ()
{ clrscr();
char s;
a sp;
f = fopen ("sp.txt", "rb+");
if (f)
{ do
{ fflush (stdin);
printf ("\n1 - Создать файл заново\n");
printf ("2 - Добавить данные в существующий файл\n");
printf ("3 - Отказаться от ввода*\n");
printf ("\n");
s = getchar();
if (s == '1')
f = fopen ("sp.txt", "wb+");
else
if (s == '2')
{f = fopen ("sp.txt", "ab+");
{while(!feof(f))
{fread(&sp[k],sizeof(a),1,f); //Cannot convert 'a' to 'int'
k++;} Invalid indirection
k--;}
while (s != '1' && s != '2' && s != '3');
} else f = fopen ("sp.txt", "wb+");
if (s != '3')
{ do
{ fflush (stdin);
clrscr();
printf ("Введите данные о спортсменах\n");
printf ("\nФамилия:\n");
gets (sp.fio);
i=1;
printf ("\nОценки:\n");
for(j=0;j<5;j++)
scanf("%s",sp.oc[j]);
fflush (stdin);
fwrite (&sp, sizeof(sp), 1, f);
k++;
printf ("\nПродолжить ввод? [д/н*]\n");
fflush (stdin);
s = getchar();
} while (s == 'д'|| s == 'Д');
fclose (f);
}
}
void osn () //do statement must have while
{ clrscr();
f = fopen ("sp.txt", "rb");
in sp;
for(j=0;j<k;j++)
{max=0;min=50;sum[j]=0;
for(i=0;i<5;i++)
{if(sp[j].oc[i]>max)
{max=sp[j].oc[i];
imax[j]=i;
}
if(sp[j].oc[i]<min)
{min=sp[j].oc[i];
imin[j]=i;
}
sum[j]+=sp[j].oc[i];
}
sum[j]=(sum[j]-sp[j].oc[imax]-sp[j].oc[imin])/3;
}
close (f);
}
void cht ()
{ clrscr();
f = fopen ("sp.txt", "rb");
a sp;
float sum[20];
int j;
printf("--------------- Таблица спортсменов ---------------");
while (feof(f)==0)
{
if (fread(&sp,sizeof(sp),1,f))
printf("\n %d %s %f ",i,sp.fio,sum[j]);
}
printf("\n---------------------------------------------------------");
getch();
fclose (f);
}
void edit ()
{ clrscr();
char s; char txt [25];
a sp;
f = fopen ("sp.txt", "ab+");
if (f)
do
{ clrscr ();
printf ("Введите фамилию спортсмена для редактирования данных\n");
fflush (stdin);
gets (txt);
rewind (f);
clrscr();
while (fread (&sp, sizeof(sp), 1, f))
if (strcmp (txt, sp.fio) == 0)
{ printf ("Введите новые данные спортсмена**\n");
printf ("\nФамилия:\n");
gets (sp.fio);
fflush (stdin);
printf ("\nОценки:\n");
for(j=0;j<5;j++)
scanf("%s",sp.oc[j]);
fflush (stdin);
fwrite (&sp, sizeof(sp), 1, f);
}
printf ("\nПродолжить редактирование? [д/н*]\n");
fflush (stdin);
s = getchar();
} while (s == 'д'|| s == 'Д');
else
{ printf ("Файл не существует! Нажмите любую клавишу\n");
getch();
}
fclose (f);
}
void main ()
{ clrscr();
char s;
do
{ clrscr();
printf ("Выберите действие:\n");
printf ("\n1 - Ввод данных\n");
printf ("2 - Редактировать данные\n");
printf ("3 - Прочесть файл\n");
printf ("4 -Выход\n");
printf ("\n");
s = getchar();
switch (s)
{ case '1': input (); break;
case '2': edit (); break;
case '3': cht (); break;
}
} while (s != '4');
getch ();
} //Пишет что пропущена пара скобок