Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.62/13: Рейтинг темы: голосов - 13, средняя оценка - 4.62
2 / 2 / 0
Регистрация: 09.02.2011
Сообщений: 78
1

Создание и чтение файла

02.05.2011, 20:54. Показов 2396. Ответов 16
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Помогите, пожалуйста, с решением лабораторной.
Задание:
Создать программы для табуляции функции и записывание результатов табуляции в дисковые файлы. Создать программы для считывания результатов табуляции из файлов и выведения их на экран.
Оформление:
При записывании результатов в файл без структуры результаты записывать в виде:
X=........... F(X)= ...........
Вывести данные о студентах, которые имеют 1 оценку 3.
Я так понимаю, что сначала необходимо создать таблицу с именами студентов и их оценками. Но как реализовать - не знаю.

Добавлено через 2 часа 26 минут
Помогите, пожалуйста, ребята!
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
02.05.2011, 20:54
Ответы с готовыми решениями:

Создание/чтение файла
Как связать тот момент, где имя файла задаёт пользователь и этот файл открывается для чтения?...

Создание SAVE файла. Запись и чтение.
Доброго времени суток! Хочу обратиться за мудрым советом к профессионалам. Мне необходимо...

Чтение/Редактирование/Создание Файла без fstream
fstream конфликтует с используемой мною библиотекой ImGui, при создании объекта для fstream (...

Создание/открытие файлов, чтение из файла и запись в файл через наследование
Имеется следующая иерархия классов: Файл, Типизированный файл, Текстовый файл Методы:...

16
2 / 2 / 0
Регистрация: 09.02.2011
Сообщений: 78
04.05.2011, 21:45  [ТС] 2
Вот, создал массив, который можно использовать за основу.
C++
1
2
3
4
5
6
7
8
srand(time(NULL));
        char a[5][5] = { 
                                        {Petrenko, 2, 2, 4, 5},
                                        {Ivanov, 3, 3, 2, 3},
                                        {Savchenko, 5, 3, 2, 4},
                                        {Bondar, 3, 5, 4, 5},
                                        {Levchenko, 4, 2, 5, 3}
                                  };
Добавлено через 2 часа 35 минут
Прочитал на форуме, как можно сохранить в файл ВЕСЬ массив, а мне необходимо, только те рядки, где у студентов первая оценка 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
#include <iostream.h>
#include <fstream.h>
#include "stdafx.h"
#include <iostream>
#include <fstream>
#include <string>
using namespace std;
 
void main ()
{
    cout<<"
           char a[5][5] = {             {Petrenko, 2, 2, 4, 5},
                                        {Ivanov, 3, 3, 2, 3},
                                        {Savchenko, 5, 3, 2, 4},
                                        {Bondar, 3, 5, 4, 5},
                                        {Levchenko, 4, 2, 5, 3}
                                  };
    "<< "wrote in the file C:\\results.txt succesfully!";
        ofstream output("C:\\results.txt", ios_base :: out | ios_base::trunc);
if (!output.is_open()) return;
output.setf(ios_base::fixed);
 
for (int n = 0 ; n < 5 ; n++)
output << double_array[n] << endl;
system ("pause");
output.close();
}
Помогите, пожалуйста, очень необходимо.
0
Эксперт С++
1069 / 848 / 60
Регистрация: 30.04.2011
Сообщений: 1,659
05.05.2011, 00:11 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
#include <iostream.h>               // -- это не нужно 
#include <fstream.h>                        // -- это не нужно
#include "stdafx.h"                            // -- это зависит от способа создания проекта.
#include <iostream>
#include <fstream>
#include <string>
using namespace std;
 
void main ()
{
        cout<<"
           char a[5][5] = {       {Petrenko, 2, 2, 4, 5},
                                        {Ivanov, 3, 3, 2, 3},
                                        {Savchenko, 5, 3, 2, 4},
                                        {Bondar, 3, 5, 4, 5},
                                        {Levchenko, 4, 2, 5, 3}
                                  };
        "<< "wrote in the file C:\\results.txt succesfully!";
                ofstream output("C:\\results.txt", ios_base :: out | ios_base::trunc);
if (!output.is_open()) return;
output.setf(ios_base::fixed);
 
for (int n = 0 ; n < 5 ; n++)
    output << double_array[n] << endl;               
system ("pause");
output.close();
}
1. Неправильно создан массив структур, вернее, его совсем нет
Надо сначала описать структуру с полями, а потом создать массив из таких структур
2. Наверху у вас массив a, причем двумерный, а выводите в цикле - одномерный double_array - совсем другой
3. Чтобы выводить не все, нужно использовать оператор if
1
2 / 2 / 0
Регистрация: 09.02.2011
Сообщений: 78
05.05.2011, 19:39  [ТС] 4
Вот, немного изменил программу. Поправьте, пожалуйста.
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
#include <iostream>
#include <fstream>
#include <string>
using namespace std;
 
void main ()
{
     srand(time(NULL));
        char a[5][5] = {             {Petrenko, 2, 2, 4, 5},
                                        {Ivanov, 3, 3, 2, 3},
                                        {Savchenko, 5, 3, 2, 4},
                                        {Bondar, 3, 5, 4, 5},
                                        {Levchenko, 4, 2, 5, 3}
                                  };
    cout<<"
           char a[5][5] = {             {Petrenko, 2, 2, 4, 5},
                                        {Ivanov, 3, 3, 2, 3},
                                        {Savchenko, 5, 3, 2, 4},
                                        {Bondar, 3, 5, 4, 5},
                                        {Levchenko, 4, 2, 5, 3}
                                  };
    "<< "wrote in the file C:\\results.txt succesfully!";
        ofstream output("C:\\results.txt", ios_base :: out | ios_base::trunc);
if (!output.is_open()) return;
output.setf(ios_base::fixed);
 
for (int n = 0 ; n < 5 ; n++)
    output << a[n][n] << endl;
system ("pause");
output.close();
}
P.S. Не будьте, пожалуйста, ко мне слишком критичны, я ведь только учусь программировать, так сказать делаю первые шаги
0
Эксперт С++
1069 / 848 / 60
Регистрация: 30.04.2011
Сообщений: 1,659
05.05.2011, 20:50 5
1. Создаем структуру:
C++
1
2
3
4
struct Student
{   string FIO;
    int rating[4];
};
2. Создаем массив структур и инициализируем:
C++
1
2
3
4
5
6
Student m[5] = {{"Petrenko", 2, 2, 4, 5},
                       {"Ivanov", 3, 3, 2, 3},
                       {"Savchenko", 5, 3, 2, 4},
                       {"Bondar", 3, 5, 4, 5},
                       {"Levchenko", 4, 2, 5, 3}
                     };
1
2 / 2 / 0
Регистрация: 09.02.2011
Сообщений: 78
05.05.2011, 20:59  [ТС] 6
Вот изменил согласно Вашим указаниям:
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
#include <iostream>
#include <fstream>
#include <string>
using namespace std;
 
void main ()
{
    struct Student
{   string FIO;
    int rating[4];
};
    
Student m[5] = {{"Petrenko", 2, 2, 4, 5},
                       {"Ivanov", 3, 3, 2, 3},
                       {"Savchenko", 5, 3, 2, 4},
                       {"Bondar", 3, 5, 4, 5},
                       {"Levchenko", 4, 2, 5, 3}
                     };
    cout<<"
           Student m[5] = {{"Petrenko", 2, 2, 4, 5},
                       {"Ivanov", 3, 3, 2, 3},
                       {"Savchenko", 5, 3, 2, 4},
                       {"Bondar", 3, 5, 4, 5},
                       {"Levchenko", 4, 2, 5, 3}
                     };
    "<< "wrote in the file C:\\results.txt succesfully!";
        ofstream output("C:\\results.txt", ios_base :: out | ios_base::trunc);
if (!output.is_open()) return;
output.setf(ios_base::fixed);
 
for (int n = 0 ; n < 5 ; n++)
    output << struct Student << endl;
system ("pause");
output.close();
}
А в каком месте и как мне поставить оператор if, что бы выбирать тех студентов, которые необходимы?
0
Эксперт С++
1069 / 848 / 60
Регистрация: 30.04.2011
Сообщений: 1,659
05.05.2011, 21:35 7
Во-первых, надо записать всю эту информацию в файл. То, что записано у вас - это не запись в файл, а фиг знает что.
Тут есть некоторые проблемы со string. Поэтому лучше сначала записывать числа, а потом уже FIO.
1. Объявление объекта-потока и связывание его с файлом:
C++
1
2
ofstream output("C:/results.txt", ios::out | ios::trunc);
if (!output.is_open()) return;
Можно чуть проще:
C++
1
2
ofstream output("C:/results.txt");               // -- по умолчанию  ios::out | ios::trunc
if (!output.is_open()) return;
Потом записать туда данные:
C++
1
2
3
4
5
6
7
 int i = 0;
while (i < 5)
{   for(int j = 0; j < 4; ++j) output << m[i].raiting[j] << ' ';
     output << m[i].FOI.c_str() << endl;
     ++i;
}
output.close();
Добавлено через 23 минуты
И только после этого можно читать данные из файла и выводить в новый файл:
Нам потребуется два файла: тот который записали - входной, и новый - выходной
C++
1
2
3
4
ifstream input("C:/results.txt");               // -- по умолчанию  ios::in
if (!output.is_open()) return;
ofstream output("C:/new_results.txt");               // -- по умолчанию  ios::out | ios::trunc
if (!output.is_open()) return;
Еще нужна переменная для чтения:
C++
1
Student p;
Потом можно писать цикл по чтению/ Причем, в каком порядке выводили, в таком порядке и читать придется:
C++
1
2
3
4
5
6
7
8
9
10
11
bool yes = true;
while(yes)
{ input >> p.rating[0] >> p.rating[1] >> p.rating[2] >> p.rating[3];
   input >> p.FIO; 
   if(!input.eof())       // -- если не конец файла
   { if(условие отбора) 
     { // -- вывод в оутпут - как раньше было написано --
     }
   } else yes = false;      // -- для выхода из цикла
}
input.close();
Вот как-то так.
1
2 / 2 / 0
Регистрация: 09.02.2011
Сообщений: 78
05.05.2011, 21:35  [ТС] 8
Внес некоторые изменения:
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
#include <iostream>
#include <fstream>
#include <string>
using namespace std;
 
void main ()
{
    struct Student
{   string FIO;
    int rating[4];
};
    
Student m[5] = {{"Petrenko", 2, 2, 4, 5},
                       {"Ivanov", 3, 3, 2, 3},
                       {"Savchenko", 5, 3, 2, 4},
                       {"Bondar", 3, 5, 4, 5},
                       {"Levchenko", 4, 2, 5, 3}
                     };
    cout<<"
           Student m[5] = {{"Petrenko", 2, 2, 4, 5},
                       {"Ivanov", 3, 3, 2, 3},
                       {"Savchenko", 5, 3, 2, 4},
                       {"Bondar", 3, 5, 4, 5},
                       {"Levchenko", 4, 2, 5, 3}
                     };
    "<< "wrote in the file C:\\results.txt succesfully!";
        
        ofstream output("C:/results.txt", ios::out | ios::trunc);
if (!output.is_open()) return;
output.setf(ios_base::fixed);
 
int i = 0;
while (i < 5)
{   for(int j = 0; j < 4; ++j) output << m[i].raiting[j] << ' ';
     output << m[i].FOI.c_str() << endl;
     ++i;
}
output.close();
}
0
Эксперт С++
1069 / 848 / 60
Регистрация: 30.04.2011
Сообщений: 1,659
05.05.2011, 21:38 9
Внимательно прочитайте мой текст и поправьте пару МОИХ опечаток. Внимательное чтение текста проги - обязательное профессиональное умение программера. Учитесь.
1
27 / 27 / 7
Регистрация: 01.05.2011
Сообщений: 85
05.05.2011, 21:47 10
Ну...вот мой не крутой вариант как у остальных, но, работающий.

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
51
52
53
54
55
56
57
58
#include <stdio.h>  
 
#define maxstud 5
 
struct student
{
    char fio[20];
    int rating[4];
};
 
int foo();
 
int main()
{
    student m[maxstud] = {{"Petrenko", { 2, 2 ,4 ,5}},
                       {"Ivanov", {3, 3, 2, 3}},
                       {"Savchenko", {5, 3, 2, 4}},
                       {"Bondar", {3, 5, 4, 5}},
                       {"Levchenko", {4, 2, 5, 3}}};
    for (int i = 0; i < 5; i++)
    {
        printf("%s\n", m[i].fio);
        for (int j = 0; j < 4; j++)
            printf("%i ", m[i].rating[j]);  
            printf("\n");
    }
 
        int n[maxstud], kol, t = 0, tcount = 0;
 
    for (int i = 0; i < maxstud; i++)
    {   
        kol = 0;
        for (int j = 0; j < 4; j++)
            {printf("rating = %i \n", m[i].rating[j]);
            if (m[i].rating[j] == 3)
                kol++;}
        printf("kol = %i", kol);
        if (kol == 1)
            { n[t] = i; t++; }
        printf("t = %i\n", t);
    }
 
    FILE *fp;
    fp = fopen("fail.txt", "w");
    
    for (int i = 0; i < t; i++)
        printf("n[i] = %i\n", n[i]);
 
    int temp;
    for (int i = 0; i < t; i++)
    {
        temp = n[i];    
        fprintf(fp, "%s\n", m[temp].fio);
    }
    fclose(fp);
 
    return 0;
}
1
2 / 2 / 0
Регистрация: 09.02.2011
Сообщений: 78
05.05.2011, 21:59  [ТС] 11
Цитата Сообщение от ValeryLaptev Посмотреть сообщение
Внимательно прочитайте мой текст и поправьте пару МОИХ опечаток.
Вы меня заводите просто в тупик.

ZloyVolkey, огромное спасибо!
Но что-то не получается запустить Вашу программу (дома программа BORLANDC выдает кучу ошибок, а Microsoft C++ 2010 - не запускает совсем файлы .cpp).
Скинь, пожалуйста, скрин запущенного файла fail.txt и роботы программы. Еще раз благодарю.
0
27 / 27 / 7
Регистрация: 01.05.2011
Сообщений: 85
05.05.2011, 22:07 12
Вот результат работы программы:

Bash
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
$ cat main.txt
Petrenko
2 2 4 5 
Ivanov
3 3 2 3 
Savchenko
5 3 2 4 
Bondar
3 5 4 5 
Levchenko
4 2 5 3 
rating = 2 
rating = 2 
rating = 4 
rating = 5 
kol = 0t = 0
rating = 3 
rating = 3 
rating = 2 
rating = 3 
kol = 3t = 0
rating = 5 
rating = 3 
rating = 2 
rating = 4 
kol = 1t = 1
rating = 3 
rating = 5 
rating = 4 
rating = 5 
kol = 1t = 2
rating = 4 
rating = 2 
rating = 5 
rating = 3 
kol = 1t = 3
n[i] = 2
n[i] = 3
n[i] = 4
Bash
1
2
3
4
$ cat fail.txt
Savchenko
Bondar
Levchenko

тут много принтэфов, но они были для отладки + вам для понимания что происходит.
Подключите еще библиотеку conio.h и в самом конце перед return 0; напишите getch(); чтобы видели результат.

Какие ошибки выдаёт компилятор?
1
2 / 2 / 0
Регистрация: 09.02.2011
Сообщений: 78
05.05.2011, 22:25  [ТС] 13
Ё File Edit Search Run Compile Debug Project Options Window Help
╔═[■]════════════════════════════ LAB#6~1.CPP ══════════════════════════5═[↑]═╗░
║#include <stdio.h> ▲░
║#include <conio.h> ■░
║#define maxstud 5 ▒░
║ ▒░
║struct student ▒░
║{ ▒░
║ char fio[20]; ▒░
║ int rating[4]; ▒░
║}; ▒░
║ ▒░
║int foo(); ▒░
║ ▒░
║int main() ▒░
║{ ▒░
║ student m[maxstud] = {{"Petrenko", { 2, 2 ,4 ,5}}, ▒░
║ {"Ivanov", {3, 3, 2, 3}}, ▒░
║ {"Savchenko", {5, 3, 2, 4}}, ▒░
║ {"Bondar", {3, 5, 4, 5}}, ▒░
║ {"Levchenko", {4, 2, 5, 3}}}; ▒░
║ for (int i = 0; i < 5; i++) ▒░
║ { ▒░
║ printf("%s\n", m[i].fio); ▒░
║ for (int j = 0; j < 4; j++) ▒░
║ printf("%i ", m[i].rating[j]); ▒░
║ printf("\n"); ▒░
║ } ▒░
║ ▒░
║ int n[maxstud], kol, t = 0, tcount = 0; ▒░
║ ▒░
║ for (int i = 0; i < maxstud; i++) ▒░
║ { ▒░
║ kol = 0; ▒░
║ for (int j = 0; j < 4; j++) ▒░
║ {printf("rating = %i \n", m[i].rating[j]); ▒░
║ if (m[i].rating[j] == 3) ▒░
║ kol++;} ▼░
╚═══════ 9:29 ════◄■▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒►─┘░
┌────────────────────────────────── Message ─────────────────────────────4─────┐
│ Compiling LAB#6~1.CPP: │
│•Error LAB#6~1.CPP 1: Unable to open include file 'STDIO.H' │
│ Error LAB#6~1.CPP 2: Unable to open include file 'CONIO.H' │
│ Error LAB#6~1.CPP 22: Function 'printf' should have a prototype │
│ Error LAB#6~1.CPP 30: Multiple declaration for 'i' │
│ Error LAB#6~1.CPP 43: Undefined symbol 'FILE' │
│ Error LAB#6~1.CPP 43: Undefined symbol 'fp' │
│ Error LAB#6~1.CPP 44: Function 'fopen' should have a prototype │
└────────────────────────────────────────────────────────────────────────── ────┘
F1 Help Alt-F8 Next Msg Alt-F7 Prev Msg Alt-F9 Compile F9 Make F10 Menu
Где-то так...
0
27 / 27 / 7
Регистрация: 01.05.2011
Сообщений: 85
05.05.2011, 22:34 14
По поводу Борланд Си ничего не могу сказать, проверьте пути к библиотекам...и запускаются ли там другие программы?
В Visual Studio создайте новый проект и вставьте туда код, запустится.
1
2 / 2 / 0
Регистрация: 09.02.2011
Сообщений: 78
05.05.2011, 22:39  [ТС] 15
Сделал как Вы сказали:
Миниатюры
Создание и чтение файла  
0
27 / 27 / 7
Регистрация: 01.05.2011
Сообщений: 85
05.05.2011, 22:41 16
Проект сохранили?
1
2 / 2 / 0
Регистрация: 09.02.2011
Сообщений: 78
05.05.2011, 23:05  [ТС] 17
Вот посмотри, пожалуйста.
Вложения
Тип файла: rar 6.rar (15.5 Кб, 10 просмотров)
0
05.05.2011, 23:05
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
05.05.2011, 23:05
Помогаю со студенческими работами здесь

Чтение бинарного файла в поток std::ifstream и вывод в другой бинарный файл std::ofstream (создание копии)
Проверил работу программы на маленькой картинке(744 байт). Все работает. С несколько бОльшими...

Создание файла с массивом и чтение этого файла обратно используя ShareActionProvider
Есть созданный массив, после нажатия на кнопку он должен вносится в файл, а потом передать этот...

Создание текстового файла и чтение данных из файла
Здравствуйте. Дана задача : Создать файл, содержащий сведения о сдаче студентами первого курса...

Создание и чтение файла
Товарищи, подскажите как можно создать файл и записать в файл в PE формате. Так же был бы...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
17
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru