Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Стивен
1 / 1 / 1
Регистрация: 10.04.2012
Сообщений: 36
#1

Файл: Изменить программу таким образом чтобы ввод исходных данных осуществлялся из файла, результат также должен выводиться в файл - C++

10.04.2012, 19:31. Просмотров 1088. Ответов 7
Метки нет (Все метки)

Помогите разобраться с этой проблемой, исходную задачу я написал, а вот как считать из файла не получается. Необходимо изменить программу таким образом чтобы ввод исходных данных осуществлялся из файла, результат также должен выводиться в файл.

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
#include <stdio.h>
#include <iostream>
#include <conio.h>
#include <iomanip.h>
using namespace std;
main()
{ int mol,pens=0,i;
float m,p,n;
char fam[10][15]={"Ivanov", "Cidorova", "Cyvorov", "Boiko", "Petrov", "Katyzhanskay", "Mirnaj",     "Belozercev", "Irduncev", "Vacileva"};
int vozr[10]={65, 32, 90, 68, 80, 74, 56, 38, 54, 60};
char pol[10]={'m', 'w', 'm', 'm', 'm', 'w', 'w', 'm', 'm', 'w'};
int st[10]={7, 12, 19, 2, 10, 8, 5, 16, 3, 10};
 
for (i=0;i<10; i++) {
 cout<<setw(12)<<fam[i]<<" ";
  cout<<setw(5)<< vozr[i];
  cout<<setw(5)<<pol[i];
  cout<<setw(5)<<st[i]<<"\n";
  if ((vozr[i]<35)&&(st[i]<4)) mol++;
  if (((vozr[i]>55)&&(pol[i]=='w'))||((vozr[i]>60)&&(pol[i]=='m'))) pens++;
}
 cout<<"\n"<<"Kol-vo molodux "<<mol<<"\n";
 cout<<"Kol-vo pencionrov "<<pens<<"\n";
 cout<<"Prochie rabotniki "<<10-mol-pens<<"\n\n";
 cout<<"Procent molodux "<<((float) mol/10)*100<<"%\n";
 cout<<"Procent pensionerov "<<((float) pens/10)*100<<"%\n";
 cout<<"Procent prochix sotrydnikov "<<((float) (10-mol-pens)/10)*100<<"%";
 getch();
  }

http://www.cyberforum.ru/cpp-beginners/thread799679.html

0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
10.04.2012, 19:31
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Файл: Изменить программу таким образом чтобы ввод исходных данных осуществлялся из файла, результат также должен выводиться в файл (C++):

В файл вставить пробелы таким образом, чтобы каждая строка имела длину 80 символов
В текстовый файл вставить пробелы таким образом, чтобы каждая строка имела...

В текстовый файл вставить пробелы таким образом, чтобы каждая строка имела длину 80 символов
В текстовый файл вставить пробелы таким образом, чтобы каждая строка имела...

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

В текстовый файл вставить пробелы таким образом, чтобы каждая строка имела длину 80 символов
В текстовый файл вставить пробелы таким образом, чтобы каждая строка имела...

В текстовый файл вставить пробелы таким образом, чтобы каждая строка имела длину 80 символов
В текстовый файл вставить пробелы таким образом, чтобы каждая строка имела...

7
Стивен
1 / 1 / 1
Регистрация: 10.04.2012
Сообщений: 36
17.04.2012, 17:42  [ТС] #2
ну кто нибудь ответьте
0
Ieroglif
19 / 19 / 2
Регистрация: 23.06.2011
Сообщений: 238
18.04.2012, 16:35 #3
C++
1
st
это стаж?
0
Стивен
1 / 1 / 1
Регистрация: 10.04.2012
Сообщений: 36
18.04.2012, 16:52  [ТС] #4
Да, st - стаж.
0
Ieroglif
19 / 19 / 2
Регистрация: 23.06.2011
Сообщений: 238
20.04.2012, 13:46 #5
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
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
// with_f.cpp: определяет точку входа для консольного приложения.
//
 
#include "stdafx.h"
#include <iostream>
#include <fstream>
#include <string>
//#include "stdio.h"
using namespace std; 
 
int main()
{
    setlocale (LC_ALL,"RUS");
    //char puth[256], puth_[256]; для ручного ввода
    string str;
    
    int n=0, str_k, var=0, i=0, z=0, g=0, j=0, simv, vspom=0,c=0, podch=0, buff=0,ofigel=0,br=0;
    int pens=0, moll=0, proch=0;
    char ch_fam[15], ch_sex;
    float pens_pr, proch_pr;
 
    //cout<<"Введите путь к исходному файлу: "; cin>>puth;  можно сделать ручнной ввод пути к файлу
    ifstream my_file;
    //my_file.open(puth);
    my_file.open("1st.txt");
    if(!my_file) cout<<"\nОшибка открытия файла!"<<endl<<endl; else cout<<"\nФайл успешно открыт!"<<endl<<endl;
    
    while(!my_file.eof()){//кол-во строк в файле
        my_file>>str;
        n++;}
    cout<<endl;
    str_k=n;//кол-во строк, в дальнейшем понадобится жёсткий учёт строк
    n=(n/4);//подсчитывает кол-во эл-в для матриц и массивов = кол-ву человек
    //далее - создание массивов и матриц
    
    my_file.clear();//чист eof
    my_file.seekg(0);//ставим метку на нулевой байт файла
     
    char** fam=new char*[n];//создаём матрицу для фамилий
    for(i;i<n;i++){fam[i]=new char[15];}
    int* age=new int[n]; //новый массив для возраста
    char* sex=new char[n]; // массив для пола
    int* stag=new int[n];//массив для стажа
    int* simv_k=new int[n];//массив для кол-ва значащих эл-в в каждой строке матрицы фамилий
    
//начало обработки строк
    while(podch<str_k){
    if(vspom==0){
        my_file>>ch_fam;
        simv=my_file.tellg();
            i=0;
        if(ofigel==0){
            vspom=(simv-(buff-i));} else {vspom=(simv-(buff-i)-1);} 
        while(i<vspom){
            fam[c][i]=ch_fam[i];
            cout<<fam[c][i];
            i++;}
        c++; ofigel++;
        simv_k[br]=vspom;
        br++; 
        my_file>>var;
        age[z]=var;
        cout<<endl<<"age: "<<age[z]<<endl;
        z++;
        vspom++;}
    else{
        my_file>>ch_sex;
        sex[g]=ch_sex;
        cout<<"sex: "<<sex[g]<<endl;
        g++;
        my_file>>var;
        stag[j]=var;
        cout<<"stag: "<<stag[j]<<endl<<endl;
        j++;
        vspom=0;
        buff=my_file.tellg();}
    podch=podch+2;}
 
    my_file.close(); 
 
    if(!(my_file)){cout<<"Ошибка закрытия файла!"<<endl;} else cout<<"Файл успешно закрыт!"<<endl;
    for(i=0;i<n;i++){
        if((((age[i])>=55)&&((sex[i])=='w'))||(((age[i])>=60)&&((sex[i])=='m'))) pens++;
        if(((age[i])<=35) && ((stag[i])<=4))moll++;}
    proch=n-(moll+pens);
    cout<<"\nПенсионеры: "<<pens<<endl<<"Молодые: "<<moll<<endl<<"Прочие сотрудники: "<<proch<<endl;
 
    pens_pr=pens*100/n;
    proch_pr=proch*100/n;
    cout<<"Процент пенсионеров: "<<pens_pr<<"%"<<endl<<"Процент прочих сотрудников: "<<proch_pr<<"%"<<endl;
 
ofstream enter_file;
//cout<<"Введите путь к файлу-приёмнику: "; cin>>puth_;  можно сделать ручнной ввод пути к файлу
//enter_file.open(puth_);
enter_file.open("2nd.txt");
if(!enter_file){cout<<"Ошибка открытия файла!"<<endl;} else cout<<"Файл успешно открыт!"<<endl;
enter_file<<"Пенсионеры: "<<pens<<endl<<"Молодые: "<<moll<<endl<<"Прочие сотрудники: "<<proch<<endl<<"Процент пенсионеров: "<<pens_pr<<"%"<<endl<<"Процент прочих сотрудников: "<<proch_pr<<"%"<<endl;
cout<<"Идёт процесс записи..."<<endl;
enter_file.close();
if(!(enter_file)){cout<<"Ошибка закрытия файла!"<<endl;} else cout<<"Файл успешно закрыт!"<<endl;
 
    system("pause");
    return 0;}
0
Вложения
Тип файла: txt 1st.txt (79 байт, 8 просмотров)
Тип файла: txt 2nd.txt (108 байт, 8 просмотров)
Стивен
1 / 1 / 1
Регистрация: 10.04.2012
Сообщений: 36
20.04.2012, 19:03  [ТС] #6
А что у тебя под переменными var, z, g, j, simv, vspom,c, podch, buff,ofigel,br подразумевается?
0
Ieroglif
19 / 19 / 2
Регистрация: 23.06.2011
Сообщений: 238
20.04.2012, 21:39 #7
var, z, g, j, simv, vspom,c, podch, buff,ofigel,br

var - целочисленная переменная, в которую помещается численная строка из файла (возраст, стаж).
с - индекс массива фамилий
z - индекс массива возраста
g - индекс массива пола
j - индекс массива стажа
br - индекс массива кол-ва символов в строке

При желании для всех массивов можно использовать одну/две переменных, инкрементирующих в самом конце цикла.

simv - используется для подсчёта значимых символов в массиве фамилий, т.к. каждая строка создана с запасом, ведь мы не знаем насколько длинной может оказаться фамилия, а потому, чтобы не вводить/выводить мусор, считается её длина каждой фамилии.

vspom и buff - используются совместно с simv:
C++
1
 vspom=(simv-(buff-i))
ввиду специфики ф-ии tellg().

ofigel используется в качестве флага состояния, если он ревен нулю - исполняется if, в противном случае - else.
0
Стивен
1 / 1 / 1
Регистрация: 10.04.2012
Сообщений: 36
21.04.2012, 00:34  [ТС] #8
спасибо)))
0
21.04.2012, 00:34
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
21.04.2012, 00:34
Привет! Вот еще темы с решениями:

Преобразовать код так, что бы ввод данных осуществлялся из файла
Задание 2. Создал структуру: #include &quot;stdafx.h&quot; #include &quot;stdio.h&quot;...

Ввод из файла массива и вывод результат в файл среднее арифметическое
Задание такое вычислить среднее арифметическое элементов массива, массив задан...

Модифицировать программу таким образом, чтобы класс содержал закрытые переменные
Нужна помощь, модифицировать программу таким образом, чтобы класс содержал...

Для каждой строки файла удалить среднее слово; результат записать в файл (файловый ввод/вывод)
для каждой строки файла удалить среднее слово. результат записать в файл


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

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru