Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 07.01.2012, 03:40   #1
skeval
Новичок
Джуниор
 
Регистрация: 06.01.2012
Сообщений: 1
По умолчанию Структуры с записью в файл

Дан файл розыгрыша чемпионата по футболу,определить команды занявшие первые 3 места и 3 последних места.

Вот имеются кое-какие наработки, но с выводом результатов у меня что-то не получается:

#include<iostream.h>
#include<stdio.h>
#include<conio.h>
void main()
{
FILE*f;
const n=5;
int i;
int maxs;
int mins;
struct rajon
{
char nazv[15];
int m;
int q;
int sum,r,l,t;} ;
rajon raj[n];
f=fopen("c:\\temp\\9.txt","w");
clrscr();
for (i=0;i<n;i++)
{
printf("%d nymerachia",i);
printf("\n nazvanie comandy :");scanf("%s",&raj[i].nazv);
printf("\n 1-match :");scanf("%p",&raj[i].m);
printf("\n 2-oy match :");scanf("%p",&raj[i].l);
printf("\n 3-i match :");scanf("%p",&raj[i].r);
}
maxs=0;
for(i=0;i<n;i++)
{
raj[i].sum=raj[i].m+raj[i].l+raj[i].r;
printf("\t %s \t%p \t%p \t%p \t%p \n",raj[i].nazv,raj[i].m,raj[i].l,raj[i].r);
fprintf(f,"\t %s \t%p \t%p \t%p \t%p \n",raj[i].nazv,raj[i].m,raj[i].l,raj[i].r);
}
for(i=0;i<n;i++)
if (raj[i].sum>maxs)maxs=raj[i].sum;
printf("\n 3-e mesto s %p naibolshimh ockami",maxs);
for(i=0;i<n;i++)
if(raj[i].sum==maxs) printf("\n %s",raj[i].nazv);
else
for(i=0;i<n;i++)
if (raj[i].sum<maxs)maxs=raj[i].sum;
printf("\n 1-oe mesto s %p naimenshimi ockami",maxs);
for(i=0;i<n;i++)
if(raj[i].sum==maxs) printf("\n %s",raj[i].nazv);
getch();

}
skeval вне форума Ответить с цитированием
Старый 07.01.2012, 12:32   #2
Maksimall89
Пользователь
 
Аватар для Maksimall89
 
Регистрация: 10.11.2010
Сообщений: 59
По умолчанию

Я не очень силен в чистом C.
1. Но у тебя точно должно быть
Код:
const int n = 6
, т.к. 3 в начало и 3 в конец.
2. Тебе нужно просто отсортировать структуру по raj[i].sum и вывести уже отсюда 3 первых и 3 последних элемента массива.
3. Запись в файл идет косвенная т.е.
Код:
fprintf(f,"\t %s \t%p \t%p \t%p \t%p \n",&raj[i]->nazv,&raj[i]->m,&raj[i]->l,&raj[i]->r);
Если я нигде не напутал, то должно заработать.

P.S. И оформи код свой с помощью тега [ CODE ]
Maksimall89 вне форума Ответить с цитированием
Старый 07.01.2012, 17:30   #3
8Observer8
Старожил
 
Аватар для 8Observer8
 
Регистрация: 02.01.2011
Сообщений: 3,322
По умолчанию

skeval, я вам приготовил заготовку Массив структур заполнен из файла (файл прилагается). Суммы очков каждой команды за матчи, тоже подсчитаны. Вам осталось только отсортировать команды по возрастанию их суммарных очков и вывести три первых и три последних команды.

Только здесь почти отсутствуют проверки корректности данных файла.

Код:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

#define MAXTEAMS 20
#define NAMESIZE 15
#define NMATCHES 3

int init_teams(struct teams team_list[], int nteams, FILE* fp);

struct teams {
    char team_name[NAMESIZE];    // название команды
    int match_points[NMATCHES];  // очки за матчи (первый матч и т.д. по возрастанию)
    int point_sum;               // сумма очков для данной коммады за все матчи
};

int main(int argc, char* argv[])
{
    struct teams team_list[MAXTEAMS];
    char* prog = argv[0];
    int nteams;
    FILE* outfp = fopen("c:\\temp\\outputfile.txt","w");

    char* name_infile = "c:\\temp\\inputfile.txt";
    FILE* infp;

    // открываем файл с входными данными
    infp = fopen(name_infile,"r");
    if (infp == NULL) {
        fprintf(stderr, "%s error: can't open file %s\n", prog, name_infile);
        return 1;
    }

    // инициализируем массив структур из файла
    nteams = init_teams(team_list, MAXTEAMS, infp);

    if (nteams > 0) {

        // сортируем команды по возрастанию суммарных результатов

        // выводим названия трех первых команд и трёх последних

    }
    //else {
    //    сообщаем, что файл с входной информацией некорректен
    //}

    fclose(infp);
    fclose(outfp);
    return 0;
}

// init_teams: инициализация списка команд team_list из файла,
//             возвращает количество команд
int init_teams(struct teams team_list[], int limteams, FILE* fp)
{
    char team_name[NAMESIZE];
    int i, j;
    struct teams *p;
    int sum = 0;

    for (i = 0; i < limteams-1 && fscanf(fp, "%s", team_name) != EOF; i++, sum = 0) {
        p = malloc(sizeof(struct teams));
        if (p != NULL) {
            // имя команды
            strcpy(team_list[i].team_name, team_name);
            // очки за матчи
            for (j = 0; j < NMATCHES; j++) {
                if (j == 0) {
                    fscanf(fp, "%*s%*s%d", &team_list[i].match_points[j]);
                }
                else {
                    fscanf(fp, "%d", &team_list[i].match_points[j]);
                }
            }
            // сумма очков за матчи
            for (j = 0; j < NMATCHES; j++) {
                sum += team_list[i].match_points[j];
            }
            team_list[i].point_sum = sum;

        }
        else {
            fprintf(stderr, "error: function init_teams\n");
        }
    }
    return i;
}
inputfile.txt
Код:
Piglets
match points: 7 5 4

Cats
match points: 3 5 3

Dogs
match points: 3 6 3

Mice
match points: 4 8 4

Wolfs
match points: 8 7 5

Skunks
match points: 7 2 4

Hamsters
match points: 6 9 7

Jerboas
match points: 1 5 7

Elks
match points: 8 3 4

Rams
match points: 7 3 4

Последний раз редактировалось 8Observer8; 07.01.2012 в 17:39.
8Observer8 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
структуры с записью в файлах hunter08923 Общие вопросы C/C++ 2 13.04.2011 08:36
С++ Проблема с записью в файл структуры aleks.halk Помощь студентам 0 01.12.2010 14:11
Проблема с записью в файл baltushka Помощь студентам 0 14.06.2009 17:39
Проблема с записью структуры в файл JamS007 Общие вопросы C/C++ 5 07.01.2009 23:13
Проблема с записью в файл...( Regloger Помощь студентам 10 15.11.2007 17:49