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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 15, средняя оценка - 4.67
IIIa66uMEM6eP
заставил Бендера
436 / 292 / 10
Регистрация: 05.12.2010
Сообщений: 1,646
Записей в блоге: 6
#1

Считать данные из файла в динамический массив соответствующего типа - C++

26.05.2011, 16:20. Просмотров 2102. Ответов 21
Метки нет (Все метки)

Здравствуйте.
Тема динамические структуры.
Считать данные из файла в динамический массив соответствующего типа.

1) В файле целых чисел хранятся последовательности ненулевых чисел. Ноль – разделитель последовательностей. Преобразовать файл, удалив в каждой последовательности члены между первым и вторым отрицательным числом. Если отрицательных чисел меньше двух, последовательность исключить из файла.

Располагая определенной динамической структурой, написать программу, предусматривающую ввод / вывод элементов списка и обработку.

2) Дан набор из 10 чисел. Создать две очереди: первая должна содержать числа из исходного набора с нечетными номерами (1, 3, …, 9), а вторая — с четными (2, 4, …, 10); порядок чисел в каждой очереди должен совпадать с порядком чисел в исходном наборе.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
26.05.2011, 16:20
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Считать данные из файла в динамический массив соответствующего типа (C++):

Считать данные из файла и записать в переменные соответствующего типа - C++
Имеется файл file.txt такого содержания(тип char*, int, float, разделенные пробелом): name 3 14.2 Как с помощью fstream считать данные из...

Считать из файла данные определенного типа и записать в массив - C++
Подскажите, пожалуйста. Допустим, у меня есть файл text.txt, в котором есть цифры/буквы/символы. Задача сводится к следующему: мне нужно...

Не могу считать матрицу из файла в динамический массив - C++
Вот проблемный кусок программы: fstream f (strConst); if (! f) { cout<<"Error_3"; return 1; } int...

Считать строки файла и поместить в динамический массив строк - C++
Ребята помогите. Нужно считать с файла, в котором 1 строка - 1 слово, строки и поместить их в динамический массив строк типа char...

Как считать из файла в массив типа int - C++
Подскажите как считать из файла в массив nbgf, если есть разделитель | ifstream loader("temp.txt"); if (loader.is_open()){ char...

Считать числа типа double из файла и записать их в массив - C++
Проблема следущая: нужна программа которая считывает числа типа double из файла (в моем случае это индексы валютного курса) и записывает их...

21
Aneron
158 / 157 / 12
Регистрация: 20.04.2010
Сообщений: 570
15.06.2011, 16:29 #16
C++
1
2
3
4
5
for(int i = 0; i < 10; ++i)
        {
                if(!add(&l,rand()))
                        printf("Add() error\n");
        }
да. ибо все значения задаются рандомом.

можете этот кусок исправить на
C++
1
2
3
4
5
6
int mas[10] = {1,2,3,4,5,6,7,8,9,10};
for(int i = 0; i < 10; ++i)
        {
                if(!add(&l,mas[i]))
                        printf("Add() error\n");
        }
и будут ваши значения.
1
IIIa66uMEM6eP
заставил Бендера
436 / 292 / 10
Регистрация: 05.12.2010
Сообщений: 1,646
Записей в блоге: 6
15.06.2011, 16:47  [ТС] #17
Aneron, там есть кстати небольшая ошибка, в каждую преобразованную очередь оно еще и 10 заносит.
0
Aneron
158 / 157 / 12
Регистрация: 20.04.2010
Сообщений: 570
15.06.2011, 17:14 #18
Лучший ответ Сообщение было отмечено автором темы, экспертом или модератором как ответ
ни кто не идеален =) все ошибаются.

или исправляете эту функцию.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
void sort(list ** l_1,list ** l_2,list ** l_3)
{
    int i = 1;
    elem * ptr = (*l_1)->first_elem;
    while(ptr)
    {       
        if(i%2)
            add(l_2,ptr->d);
        else
            add(l_3,ptr->d);
        ptr = ptr->next_elem;
        ++i;
    }
}
или эту
C++
1
2
3
4
5
6
7
8
9
void add(list ** l,elem * new_elem)
{
    new_elem -> next_elem = NULL;
    if((*l)->last_elem)
        (*l)->last_elem->next_elem = new_elem;
    else
        (*l)->first_elem = new_elem;
    (*l)->last_elem = new_elem;     
}
1
IIIa66uMEM6eP
заставил Бендера
436 / 292 / 10
Регистрация: 05.12.2010
Сообщений: 1,646
Записей в блоге: 6
15.06.2011, 21:29  [ТС] #19
Большое всем спасибо и Aneron в частности, теперь бы еще его программу понять полностью))
0
Aneron
158 / 157 / 12
Регистрация: 20.04.2010
Сообщений: 570
16.06.2011, 12:04 #20
Лучший ответ Сообщение было отмечено автором темы, экспертом или модератором как ответ
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
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
#include "stdafx.h"
#include <stdlib.h>
 
// создаю структуру - элемент очереди.
struct elem 
{
   int d;//Хранимая цифра.
   elem * next_elem;//Указатель на сл. элемент
   elem()//Конструктор по умолчанию. Вызывается при создании нового элемента очереди.
   {
           next_elem = NULL;
   }
 
};
//структура-очередь. У очереди добавление элемента происходит с одного конца, а удаление с другого. Для этого храню указатели на оба конца.
struct list
{
        elem * first_elem;
        elem * last_elem;
        list()//Конструктор по умолчанию. 
        {
                first_elem = last_elem = NULL;
        }
};
 
//Добавление в очередь элемента с заданной цифрой.
bool add(list ** l,int d)
{
        elem * new_elem = new elem();//Создаю новый элемент очереди.
        if(new_elem == NULL)//Проверяю, создан ли он.
                return false;
        new_elem->d = d;//Присваиваю цифре элемента значение заданной цифры.
        if((*l)->last_elem)//Проверяю, есть ли в очереди другие элементы.
                (*l)->last_elem->next_elem = new_elem;//Если есть, то делаю новый элемент потомком последнего элемента.
        else
                (*l)->first_elem = new_elem;//Если нет, то делаю новый элемент первым в очереди.
        (*l)->last_elem = new_elem;//Делаю новый элемент последним в очереди.             
        return true;
}
//Добавление в очередь уже существующего элемента.
void add(list ** l,elem * new_elem)
{
        new_elem -> next_elem = NULL;//Нам не нужны его потомки.
        if((*l)->last_elem)
                (*l)->last_elem->next_elem = new_elem;
        else
                (*l)->first_elem = new_elem;
        (*l)->last_elem = new_elem;             
}
//Удаление элемента.
void del (list ** l)
{
        if((*l)->first_elem)//Удаление происходит если очередь не пуста.
        {
                elem * ptr = (*l)->first_elem;//Сохраняю указатель на первый элемент.
                (*l)->first_elem = (*l)->first_elem->next_elem;//Делаю второй элемент в очереди первым.
                delete ptr;//Освобождаю память из под первого элемента.
        }
}
//Разбиваю по двум др. очередям.
void sort(list ** l_1,list ** l_2,list ** l_3)
{
        int i = 1;//Порядковый номер элемента. 
        elem * ptr = (*l_1)->first_elem;//Создаем указатель и присваиваем ему значение первого элемента очереди.
        while(ptr)//Проверяем, существует ли элемент.
        {
                if(i%2)//Если порядковый номер элемента кратен 2, то добавляем в первый список.
                        add(l_2,ptr);
                else//Если нет, то добавляем в второй список.
                        add(l_3,ptr);
 
                ptr = ptr->next_elem;//Переходим к сл.элементу очереди.
                ++i;//Увеличиваем номер элемента.
        }
}  
 
int main(int argc, char *argv[])
{
//Создаем 3 очереди.
        list * l = new list();
        list * l_1 = new list();
        list * l_2 = new list();
//Добавляем элементы в первую.
        for(int i = 0; i < 10; ++i)
        {
                if(!add(&l,rand()))
                        printf("Add() error\n");
        }
//Выводим первую очередь.
        elem * ptr = l->first_elem;
        while(ptr)
        {
                printf("%d\n",ptr->d);
                ptr = ptr->next_elem;
        }
//Разкидываем по 2 ост.очередям.
        sort(&l,&l_1,&l_2);
 
        printf("\n\n");
//Выводим остальные 2 очереди. 
        ptr = l_1->first_elem;
        while(ptr)
        {
                printf("%d\n",ptr->d);
                ptr = ptr->next_elem;
        }
 
        printf("\n\n");
 
        ptr = l_2->first_elem;
        while(ptr)
        {
                printf("%d\n",ptr->d);
                ptr = ptr->next_elem;
        }
 
    system("PAUSE");
    return EXIT_SUCCESS;
}
1
IIIa66uMEM6eP
заставил Бендера
436 / 292 / 10
Регистрация: 05.12.2010
Сообщений: 1,646
Записей в блоге: 6
16.06.2011, 13:06  [ТС] #21
Aneron, можно вопрос? а что значит вот такая конструкция elem * ptr = l->first_elem;
0
Aneron
158 / 157 / 12
Регистрация: 20.04.2010
Сообщений: 570
16.06.2011, 13:51 #22
Цитата Сообщение от Aneron Посмотреть сообщение
elem * ptr = l->first_elem;//Создаем указатель и присваиваем ему значение первого элемента очереди.
для перебора. сначала начинаешь просмотр с первого элемента. и пока не достигнешь последнего.
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
16.06.2011, 13:51
Привет! Вот еще темы с ответами:

Считать данные текстового файла в массив - C++
Здравствуйте знатоки. Есть файл file.txt в котором содержатся числа например массив из 5 символов (сам массив не определён и чисел на...

Как из файла txt считать данные в массив? - C++
Добрый день. С с++ у меня очень плохо, но срочно нужно сделать одну вещь. Есть файл file.txt, в нем располагается массив данных, к...

Как считать данные с файла и записать в массив? - C++
В файле данные расположены следующим образом : Radius: 1 Coord point: (5;10) Radius: 5 Coord point: (1;7) Radius: 6 Coord...

Считать данные из текстового файла и записать их в массив float-ов - C++
Помогите пожалуйста!!!Очень нужно! как считать данные из txt файла и записать их в массив float на языке с++.


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

Или воспользуйтесь поиском по форуму:
22
Yandex
Объявления
16.06.2011, 13:51
Ответ Создать тему
Опции темы

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