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

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

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 04.06.2012, 18:32   #1
scrinn
Пользователь
 
Регистрация: 20.05.2012
Сообщений: 10
Восклицание C++ Структуры и работа с файлами(исправить программу)

Что делает этот код:
Входной файл st.txt содержит сведения о сдаче студентами группы экзаменационной сессии.Каждая запись файла содержит фамилию и инициалы студента(15 символов) и пять оценок( 5 символов) и завершается символом "перевод строки".Напечатать список студентов с указанием среднего бала каждого студента.

Код:
#include <stdio.h>
#include <conio.h>
 
 
struct STUDENT
{ 
    char FIO[15];
    char oc[7];
};
 
void main()
{
    FILE *f;
    struct STUDENT tz;
    int i,s;
    float e;
    if((f=fopen("st.txt","r"))==NULL)
    {
        puts("file st.txt not found");
        return;
    }
    puts ("\nF.I.O.     Sr. ball");
    puts ("--------------------");
    while (fgets((char*)&tz,sizeof(struct STUDENT),f)!=NULL)
    {
     for(i=0,s=0;i<5;i++)
      s+=tz.oc[i]-'0';
     tz.FIO[14]='\0';
     printf("%s %.1f\n",tz.FIO,(float) s/5);
     
  }
    
    fclose(f);
    getch();
}
Нужно чтобы он делал следующее:
Выводился список только тех студентов у которых средний бал выше 4, и нету двоек.

Спасибо.
scrinn вне форума Ответить с цитированием
Старый 04.06.2012, 18:41   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Код:
   
bool two=false;  
for(i=0,s=0;i<5;i++){
      s+=tz.oc[i]-'0';
      if(tz.oc[i]=='2') two=true;
}
if(!two && s/4>4){
     tz.FIO[14]='\0';
     printf("%s %.1f\n",tz.FIO,(float) s/5);
}
Устроит?
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 04.06.2012, 18:49   #3
scrinn
Пользователь
 
Регистрация: 20.05.2012
Сообщений: 10
По умолчанию

Цитата:
Сообщение от Stilet Посмотреть сообщение
Код:
   
bool two=false;  
for(i=0,s=0;i<5;i++){
      s+=tz.oc[i]-'0';
      if(tz.oc[i]=='2') two=true;
}
if(!two && s/4>4){
     tz.FIO[14]='\0';
     printf("%s %.1f\n",tz.FIO,(float) s/5);
}
Устроит?
Да,все работает, Спасибо!
Не утрудит ли вас обьяснить вот это условие
Код:
if(!two && s/4>4){
конкретно что означает !two (не два?) и s/4>4 почему делится на 4?
scrinn вне форума Ответить с цитированием
Старый 04.06.2012, 18:56   #4
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
почему делится на 4?
А сколько там оценок? 7? Дели на 7.
Цитата:
конкретно что означает !two (не два?)
То и означает - "Если не найдена двойка". См. выше в цикле проверку на двоешников.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Конструирование файлов с элементами сложной структуры. Разработать программу работы с файлами записей... Anton94.by Паскаль, Turbo Pascal, PascalABC.NET 1 08.02.2012 00:30
Pascal (Работа с файлами) как исправить ошибку Natsu Помощь студентам 9 28.02.2010 20:24
Delphi Работа с файлами. Помогите пожалуйста отредактировать программу)) katia230990 Помощь студентам 10 03.06.2008 17:14
Написать программу для зачета (Работа с файлами) Барби Общие вопросы C/C++ 6 22.12.2007 15:40