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

Файл: Загрузка данных из файла: первый столбец записывался в 1й массив, второй столбец - во 2й массив, а 3й столбец - в 3й массив.

04.03.2013, 04:25. Показов 7501. Ответов 49
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Есть текстовый файл, в нем 3 столбца чисел (число строк заранее неизвестно). Напишите пожалуйста код, чтобы первый столбец записывался в 1й массив, второй столбец во 2й массив, а 3й столбец в 3й массив.
Вложения
Тип файла: txt 1.txt (254 байт, 48 просмотров)
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
04.03.2013, 04:25
Ответы с готовыми решениями:

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

Вывести элементы матрицы в следующем порядке: первый столбец сверху вниз, второй столбец снизу вверх...
program Matrix12; var a:array of integer; M, N, i, j:Integer; begin randomize; ...

Вставить одномерный массив в двумерный массив так, чтобы второй столбец был отсортирован по убыванию
Помогите пожалуйста решить задачку: Вставить в качестве новой строки одномерный массив В в...

Массив: переставить местами столбец с наибольшим количеством нулевых элементов и столбец последний по порядку
Друзья, помогите плиз сделать лабу в VBA) Написать процедуру. Для заданного массива В(4,5),...

49
25 / 18 / 0
Регистрация: 04.03.2013
Сообщений: 170
Записей в блоге: 1
07.03.2013, 01:42  [ТС] 21
Author24 — интернет-сервис помощи студентам
Методами объектно-ориентированного программирования построить графики на канве формы. Для построения графиков могут быть использованы компоненты : PaintBox или Image. Координаты графиков записаны в текстовом файле 1.txt , где первый и второй столбец это координата Y для первого и второго графика, а третий столбец это координата Х для первой и для второй функции. Количество строк в файле заранее не известно.
0
5498 / 4893 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
07.03.2013, 01:56 22
Например, создать два класса: класс График и структуру Координаты. Класс График содержит массив (вектор) объектов Координаты. В структуре Координаты - три поля: два для X и одно для Y. В класса График сделать перегрузку операторов << и >> для записи и чтения координат Графика (вектора с Координатами) в файл/из файла. Чтение и запись можно упростить (нет надобности считать строки в файле), так как вектор знает свой размер (количество Координат).
1
25 / 18 / 0
Регистрация: 04.03.2013
Сообщений: 170
Записей в блоге: 1
07.03.2013, 02:08  [ТС] 23
еще бы найти хороший материал, где доступно объясняется перегрузка операторов , а то я только недавно узнал что это вообще такое )
0
5498 / 4893 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
07.03.2013, 02:12 24
Цитата Сообщение от alsav22 Посмотреть сообщение
Чтение и запись можно упростить (нет надобности считать строки в файле), так как вектор знает свой размер (количество Координат).
Хотя если по заданию не известно, то нужно считать. И с графиками нужно подумать. В файле координаты двух графиков, поэтому нужно в Кординатах два поля: для X и для Y. Два объекта График. Запись/чтение в файл с извращениями: две координаты в разные объекты График, третья - и в один, и во второй. Как-то так...
1
25 / 18 / 0
Регистрация: 04.03.2013
Сообщений: 170
Записей в блоге: 1
07.03.2013, 02:18  [ТС] 25
Да, нужно думать, но пока это кажется не реальным...
0
5498 / 4893 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
07.03.2013, 02:21 26
Эти два графика всегда вместе рисуются? Отдельно не выводятся?
0
25 / 18 / 0
Регистрация: 04.03.2013
Сообщений: 170
Записей в блоге: 1
07.03.2013, 02:27  [ТС] 27
да 2 графика на 1м PaintBox или Image
0
5498 / 4893 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
07.03.2013, 02:42 28
Тогда класс, типа, Двойной График , и делать как в 22 посте.

Добавлено через 1 минуту
Хотя из задания не следует, что вывод общий...
0
25 / 18 / 0
Регистрация: 04.03.2013
Сообщений: 170
Записей в блоге: 1
07.03.2013, 02:43  [ТС] 29
а если создать не двойной класс, а 2 класса так не лучше будет?
0
5498 / 4893 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
07.03.2013, 02:53 30
Лучше так, как в 22 посте, но в структуре Координаты два поля: X и Y. Единственное, что при такой записи в файле, не удастся перегрузить в классе операторы ввода/вывода. Будет отдельная функция чтения/записи в файл, которая принимает, в качестве аргументов, два объекта График.

Добавлено через 3 минуты
Два класса для графиков создавать смысла нет, потому что это будут два одинаковых класса.
1
25 / 18 / 0
Регистрация: 04.03.2013
Сообщений: 170
Записей в блоге: 1
15.03.2013, 21:56  [ТС] 31
Цитата Сообщение от alsav22 Посмотреть сообщение
Как вариант (если не считать количество строк в файле, а создавать массивы с запасом):
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
#include <iostream>
#include <fstream>
#include <windows.h>
#include <cstdlib>
using namespace std;
 
const int N = 100;
 
void show_arr(double* arr, int number)
{
    cout.precision(10);
    cout.showpoint;
    for (int i = 0; i < number; i++)
        cout << arr[i] << endl;
    cout << endl;
}
 
int main()
{
    double arr1[N], arr2[N], arr3[N];
 
    ifstream fin("1.txt");
    
    int i;
    for (i = 0; fin; i++)
    {
        fin >> arr1[i] >> arr2[i] >> arr3[i];
    }
    --i;
    
    show_arr(arr1, i);
    show_arr(arr2, i);
    show_arr(arr3, i);
    
    system("pause");
    return 0;
}
Добавлено через 21 минуту
Если сначала посчитать количество строк с числами в файле (после последней строки с числами не должно быть пустых строк):
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 <iostream>
#include <fstream>
#include <string>
#include <windows.h>
#include <cstdlib>
using namespace std;
 
void show_arr(double* arr, int number)
{
    cout.precision(10);
    cout.showpoint;
    for (int i = 0; i < number; i++)
        cout << arr[i] << endl;
    cout << endl;
}
 
int main()
{
    ifstream fin("1.txt");
 
    string str;
    int arr_size = 0;
    while(fin)
    {
        getline(fin, str);
        if(fin) ++arr_size;
    }
    
    fin.clear();
    fin.seekg(0);
    
    double *arr1 = new double[arr_size];
    double *arr2 = new double[arr_size];
    double *arr3 = new double[arr_size];
    
    for (int i = 0; i < arr_size; i++)
           fin >> arr1[i] >> arr2[i] >> arr3[i];
    
    
    show_arr(arr1, arr_size);
    show_arr(arr2, arr_size);
    show_arr(arr3, arr_size);
 
    delete [] arr1;
    delete [] arr2;
    delete [] arr3;
 
    system("pause");
    return 0;
}

как здесь можно определить количество столбцов, если мы не знаем заранее сколько их ???
0
5498 / 4893 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
16.03.2013, 00:20 32
Цитата Сообщение от Ramoncheg Посмотреть сообщение
как здесь можно определить количество столбцов, если мы не знаем заранее сколько их ???
Столбцов или строк? Если столбцов, то:

Цитата Сообщение от Ramoncheg Посмотреть сообщение
Есть текстовый файл, в нем 3 столбца чисел
Если строк, то вопрос уже был и ответ уже был.
0
25 / 18 / 0
Регистрация: 04.03.2013
Сообщений: 170
Записей в блоге: 1
16.03.2013, 09:34  [ТС] 33
А если в нем не 3 столбца, а скажем m , и как нам его можно найти, если допустим мы не знаем ни количество строк ни количество столбцов?
0
4226 / 1795 / 211
Регистрация: 24.11.2009
Сообщений: 27,562
16.03.2013, 09:46 34
Цитата Сообщение от alsav22 Посмотреть сообщение
Как вариант (если не считать количество строк в файле, а создавать массивы с запасом):
Ты серьёзно? Файлы поддерживаются много большего размера, чем память, а не наоборот.
0
5498 / 4893 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
16.03.2013, 12:00 35
Цитата Сообщение от Ramoncheg Посмотреть сообщение
А если в нем не 3 столбца, а скажем m , и как нам его можно найти, если допустим мы не знаем ни количество строк ни количество столбцов?
Насчёт подсчёта количества строк я уже всё объяснил.

А если в нем нем не 3 столбца, а скажем m
, то посчитать количество чисел в строке. Задача не сложная.
0
25 / 18 / 0
Регистрация: 04.03.2013
Сообщений: 170
Записей в блоге: 1
16.03.2013, 16:39  [ТС] 36
Допустим , а как же тогда записать считывание из файла и запись в массив, если мы не знаем сколько этих массивов?

Добавлено через 28 минут
Как я понял сначала нужно найти количество символов, которые находятся через пробел, а потом что делать ?
0
5498 / 4893 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
16.03.2013, 20:34 37
Цитата Сообщение от Ramoncheg Посмотреть сообщение
Как я понял сначала нужно найти количество символов, которые находятся через пробел, а потом что делать ?
Потом посчитать количество строк и создать соответственное количество массивов, соответственного размера.
0
25 / 18 / 0
Регистрация: 04.03.2013
Сообщений: 170
Записей в блоге: 1
16.03.2013, 21:58  [ТС] 38
Цитата Сообщение от alsav22 Посмотреть сообщение
Потом посчитать количество строк и создать соответственное количество массивов, соответственного размера.

а как же сделать , чтобы если мы нашли m ( число столбцов) , оно автоматически создавало столько же массивов, и записывало в них столбы????
0
1458 / 795 / 257
Регистрация: 21.06.2011
Сообщений: 1,740
Записей в блоге: 2
17.03.2013, 00:09 39
Я вот, как еще один вариант, через slice сделал:
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
#include <iostream>
#include <fstream>
#include <iterator>
#include <vector>
#include <valarray>
 
auto print = [](const std::valarray<double> v)
{
    for (double x : v) std::cout<<x<<" ";
    std::cout<<"\n";
};
 
int main()
{ 
    std::ifstream ofs("D:/some_file.txt");
    if (ofs.is_open())
    {
        std::vector<double> v {std::istream_iterator<double>(ofs), std::istream_iterator<double>()};
        std::valarray<double> data(v.data(), v.size());
        
        unsigned rows = data.size() / 3;
        std::valarray<double> first =    data[std::slice(0, rows, 3)];
        std::valarray<double> second =   data[std::slice(1, rows, 3)];
        std::valarray<double> third =    data[std::slice(2, rows, 3)];
        
        std::cout<<"Results:\n";
        std::cout<<"first:  ";
        print(first);
        std::cout<<"second: ";
        print(second);
        std::cout<<"third:  ";
        print(third);
        
        ofs.close();
    }
    else
        std::cout << "Error opening file\n";
    
    return 0;
}
0
5498 / 4893 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
17.03.2013, 00:17 40
Цитата Сообщение от Ramoncheg Посмотреть сообщение
а как же сделать , чтобы если мы нашли m ( число столбцов) , оно автоматически создавало столько же массивов
Создать массив указателей размером m. В цикле выделить, под каждый указатель этого массива, память размером, равным количеству строк в файле.
1
17.03.2013, 00:17
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
17.03.2013, 00:17
Помогаю со студенческими работами здесь

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

Ввести 10 чисел в массив и вывести в столбец A в порядке ввода, а в столбец B в обратном порядке
Написать на VBA процедуру, организующую ввод с клавиатуры 10 чисел и последующую их распечатку в...

Задан массив А[1..5,1..6]. Поменять в нем местами первый и последний столбец.
Помогите пожалуйста с заданием. Задан массив А. Поменять в нем местами первый и последний...

Выбрать первый столбец таблицы и сформировать массив заданного вида
есть таблица нужно выбрать её первый столбец со значениями(tutorial,extends,rules) и сформировать...


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

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