Форум программистов, компьютерный форум CyberForum.ru

Записи.Работа с текстовыми файлами - C++

Восстановить пароль Регистрация
 
Arina
 Аватар для Arina
0 / 0 / 0
Регистрация: 26.04.2012
Сообщений: 14
03.05.2012, 10:00     Записи.Работа с текстовыми файлами #1
В деканате хранится информация о зимней сессии на 1 курсе(фамилия,номер группы,оценка 1 по геометрии,оценка 2 по алгебре,оценка 3 по информатике).Составить программу считывающую данные из текстового файла,печатающую название предмета,который был сдан лучше всего
помогите решить пожалуйста..очень нужно
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
03.05.2012, 10:00     Записи.Работа с текстовыми файлами
Посмотрите здесь:

C++ Работа с текстовыми файлами
Работа с текстовыми файлами. C++
Работа с текстовыми файлами C++
C++ Работа с текстовыми файлами в С++
Работа с текстовыми файлами си++ C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
amfisat
 Аватар для amfisat
67 / 67 / 1
Регистрация: 16.06.2009
Сообщений: 235
03.05.2012, 12:43     Записи.Работа с текстовыми файлами #2
код
#include <cstdio>

const int n=80;

struct student
{
char name[n]; //фамилия
int group;
int mark[3]; // массив оценок за 3 предмета
} st[6]; // 6 студентов

int main()
{
FILE* file;
if ((file = fopen("file.txt","r")) == NULL)
{
printf ("Error in opening file for reading! \n");
return 1;
}
// считываем информацию из файла
for (int i=0; i<6; i++)
{
fscanf (file, "%s %d", st[i].name, &st[i].group); //сначала фамилию и номер группы
for (int j=0; j<3; j++)
fscanf (file, "%d ", &st[i].mark[j]); //затем - 3 оценки
}
fclose(file);

//для проверки - выводим файл в консоль
for (int i=0; i<6; i++)
{
printf ("%s %d ", st[i].name, st[i].group);
for (int j=0; j<3; j++)
printf ("%d ", st[i].mark[j]);
printf ("\n");
}

int total_mark[3] = {0};

//суммируем все оценки за каждый предмет
for (int j=0; j<3; j++)
for (int i=0; i<6; i++)
total_mark[j] += st[i].mark[j];

//ищем предмет с наибольшей суммой оценок за экзамен по нему
int max_mark = total_mark[0];
char subj[3][80] = {"Geometry", "Algebra", "Informatics"};
total_mark[1] >= max_mark ? ( total_mark[1]>=total_mark[2] ? max_mark = total_mark[1] : max_mark = total_mark[2]) : (max_mark>=total_mark[2] ? max_mark = total_mark[1]: max_mark = total_mark[2]);

//выводим нужный предмет
for (int j=0; j<3; j++)
if (max_mark == total_mark[j])
printf ("\n\nThe subject which have passed with the best marks: %s \n\n", subj[j]);
return 0;
}


Результат работы - во вложении.

Содержание файла file.txt:
file.txt
Ivanov 111 3 4 5
Petrov 112 4 4 5
Sidorov 113 5 4 4
Ivanova 211 4 4 4
Petrova 212 3 3 4
Sidorova 213 5 5 5
Миниатюры
Записи.Работа с текстовыми файлами  
ForEveR
Модератор
Эксперт C++
 Аватар для ForEveR
7927 / 4709 / 318
Регистрация: 24.06.2010
Сообщений: 10,524
Завершенные тесты: 3
03.05.2012, 13:40     Записи.Работа с текстовыми файлами #3
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
#include <vector>
#include <iterator>
#include <algorithm>
#include <fstream>
 
struct student_t
{
   student_t():
      group(0), alg_note(0), geom_note(0), inf_note(0)
   {
   }
   std::string name;
   int group;
   int alg_note;
   int geom_note;
   int inf_note;
};
 
std::istream& operator >> (std::istream& is, student_t& student)
{
   is >> student.name >> student.group >> student.alg_note >> student.geom_note >> student.inf_note;
   return is;
}
 
std::ostream& operator << (std::ostream& os, const student_t& student)
{
   os << "Student: " << student.name << "/" << student.group << std::endl;
   os << "Notes. alg note: " << student.alg_note << " geom note: " << student.geom_note << 
      " inf note: " << student.inf_note << std::endl;
   return os;
}
 
int main()
{
   std::ifstream ifs("students.txt");
   if (!ifs)
   {
      return 1;
   }
   std::vector<student_t> vec((std::istream_iterator<student_t>(ifs)), std::istream_iterator<student_t>());
   std::copy(vec.begin(), vec.end(), std::ostream_iterator<student_t>(std::cout));
   double alg_all = 0, geom_all = 0, inf_all = 0;
   std::for_each(vec.begin(), vec.end(), [&alg_all, &geom_all, &inf_all](const student_t& stud)
   {
      alg_all += stud.alg_note; geom_all += stud.geom_note; inf_all += stud.inf_note;
   });
   double alg_middle = alg_all / vec.size(), geom_middle = geom_all / vec.size(), inf_middle = inf_all / vec.size();
   double max = std::max(alg_middle, std::max(geom_middle, inf_middle));
   std::cout << (max == alg_middle ? "Alg" : max == geom_middle ? "Geom" : "Inf") << std::endl;
}
Bash
1
2
3
4
5
6
7
8
9
10
11
12
13
14
forever@pterois:~/My_pro1/cpp_pro$ ./new
Student: Ivanov/111
Notes. alg note: 3 geom note: 4 inf note: 5
Student: Petrov/112
Notes. alg note: 4 geom note: 4 inf note: 5
Student: Sidorov/113
Notes. alg note: 5 geom note: 4 inf note: 4
Student: Ivanova/211
Notes. alg note: 4 geom note: 4 inf note: 4
Student: Petrova/212
Notes. alg note: 3 geom note: 3 inf note: 4
Student: Sidorova/213
Notes. alg note: 5 geom note: 5 inf note: 5
Inf
Arina
 Аватар для Arina
0 / 0 / 0
Регистрация: 26.04.2012
Сообщений: 14
04.05.2012, 10:14  [ТС]     Записи.Работа с текстовыми файлами #4
спасибо большое....очень приятно что помогаете....
Yandex
Объявления
04.05.2012, 10:14     Записи.Работа с текстовыми файлами
Ответ Создать тему
Опции темы

Текущее время: 09:56. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru