Консультация № 181133
06.12.2010, 23:14
0.00 руб.
0 2 1
Здравствуйте, уважаемые эксперты! Прошу Вас помочь с переделыванием структуры программы в приложении, написаной на code blocks, на работу с файлами.
Хочется в готовой программе увидеть следующий вывод: http://s43.radikal.ru/i102/1011/cc/79e92bc876cb.png
Спасибо.

Приложение:
#include <stdio.h>
#include<string.h>
#define SIZE 4
#define MAX_BALLS 4


typedef struct
{
int year;
int month;
int day;
} Born;

typedef struct student
{
char FIO[20];
char Gender[2];
Born b;

char City[30];
int Balls[MAX_BALLS];
} Student;

void Print_Group(Student MyMas[], int quant);
void Izm_Group(Student MyMas[], Student MyMas1[], int quant, int *quant1);
void Sort_Group(Student MyMas[], int quant);
int main()
{
int i;
int j;
int n1;
Student GROUP[SIZE], GROUP1[SIZE];


for ( i = 0; i<SIZE; i++)
{
printf("\nNAME: ");
scanf("%s", GROUP[i].FIO);

printf("Gender(m/f): ");
scanf("%s", GROUP[i].Gender);

printf("City : ");
scanf("%s", GROUP[i].City);

printf("Marks[%d] : ", MAX_BALLS);
for (j=0;j<MAX_BALLS;j++)
scanf("%d", &GROUP[i].Balls[j])
;

}

printf("______________________\n");
printf("\nVvednniy spisok[%i]\n",SIZE);
printf("______________________\n");
Print_Group(GROUP, SIZE);
printf("\n");

Izm_Group(GROUP,GROUP1,SIZE, &n1);
printf("______________________\n");
printf("Sokrazhennyi spisok[%i]\n",n1);
printf("______________________\n");
Print_Group(GROUP1,n1);
printf("\n");

Sort_Group(GROUP1,n1);
printf("______________________\n");
printf("Otsortirovannyi spisok[%i]\n",n1);
printf("______________________\n");
Print_Group(GROUP1,n1);

return 0;
}

void Print_Group(Student MyMas[], int quant)
{ int i,j;
double sum;
printf("\Name\tGender\tCity\tMarks\tSredniy ball\n");
for( i=0, sum=0.0; i<quant; i++)

{
printf("%s\t%s\t%s\t", MyMas[i].FIO, MyMas[i].Gender, MyMas[i].City);
for(j=0, sum=0.0; j<MAX_BALLS; j++)
{ sum+=MyMas[i].Balls[j];
printf("%d ", MyMas[i].Balls[j]);
}
printf("%4.2f\n", sum/MAX_BALLS);
}
}


void Izm_Group(Student MyMas[], Student MyMas1[], int quant, int *quant1)
{

int i;

for(i=0, *quant1=0; i<quant; i++)
if((strcmp(MyMas[i].Gender,"f")==0)&&(strcmp(MyMas[i].City,"SPb")==0))
{
MyMas1[(*quant1)++]=MyMas[i];
}
}

void Sort_Group(Student MyMas[],int quant)
{

int i, j, k, k1;
int sum, sum1;
Student buf;
for(i=1; i<quant;i++)
for(j=quant-1; j>=i;j--)

{
for (k=0, sum=0; k<MAX_BALLS; k++)
sum+=MyMas[j].Balls[k
];

for (k1=0, sum1=0; k1<MAX_BALLS; k1++)
sum1+=MyMas[j-1].Balls[k1];

if(sum1>sum)
{
buf=MyMas[j];
MyMas[j]=MyMas[j-1];
MyMas[j-1]=buf;
}

}
}

Обсуждение

давно
Старший Модератор
312929
1973
07.12.2010, 15:54
общий
это ответ
Здравствуйте, Aptemis!

Переделка потребуется минимальная.

В начало процедуры main (сразу после определения переменных) добавьте:

char *filename;
FILE *file;

printf("\nFILE NAME: ");
scanf("%s", filename);

if ((file = fopen(filename, 'w')) == NULL)
{
printf("Не удаётся открыть файл.\n");
exit(1);
};

Все printf("", ...) без последующего scanf (и в Print_Group тоже) замените на fprintf(file, "", ...).

В конце процедуры main (перед return 0) вставьте:

fclose(file);

Тогда вывод будет в файле с именем filename, которое вы введете в начале.
2
Неизвестный
10.12.2010, 23:31
общий
Очевидно, что это не является ответом на вопрос, максимум комментарием или инструкцией к выполнению, вместо целой программы лишь часть, вместо написания под код блокс даже не знаю для чего написана, борланд, наверное, помимо всего прочего эта не то, что часть программы, которую нужно добавить, это максимум половина от того, что действительно требуется.
Итог: не то, что не работает, программа даже теоретически не в состоянии работать, ведь в ней просто нет нужных частей.
Я продвинулся гораздо дальше, но или ужасная табуляция, или ошибка сегментации все равно вылезает. Надеялся, что свежий взгляд решит эту проблему, но нет, печально.
Форма ответа