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

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

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

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

26.05.2011, 16:20. Просмотров 2121. Ответов 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
asics
Freelance
Эксперт С++
2848 / 1783 / 144
Регистрация: 09.09.2010
Сообщений: 3,841
26.05.2011, 16:53 #2
Лучший ответ Сообщение было отмечено автором темы, экспертом или модератором как ответ
Цитата Сообщение от IIIa66uMEM6eP Посмотреть сообщение
1) В файле целых чисел хранятся последовательности ненулевых чисел. Ноль – разделитель последовательностей. Преобразовать файл, удалив в каждой последовательности члены между первым и вторым отрицательным числом. Если отрицательных чисел меньше двух, последовательность исключить из файла.
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
#include <iostream>
#include <fstream>
#include <vector>
#include <algorithm>
#include <functional>
#include <iterator>
 
size_t cnt_neg(std::vector<int> &a){
  return std::count_if(a.begin(), a.end(), std::bind2nd(std::less<int>(), 0));
}
 
int main(){
  std::fstream fs("1.txt", std::ios::in);
  if(!fs){
    std::cerr << "File not found" << std::endl;
    return 1;
  }
  std::vector<std::vector<int> > m;
  while(!fs.eof()){
    std::vector<int> t;
    int t_;
    while(fs >> t_){
      if(!t_)
        break;
      t.push_back(t_);
    }
    m.push_back(t);
  }
  fs.close();
  fs.open("1.txt", std::ios::out);
  for(int i = 0; i < m.size(); ++i){
    if(cnt_neg(m[i]) < 2)
      continue;
    std::vector<int>::iterator it_1 = std::find_if(m[i].begin(), m[i].end(), std::bind2nd(std::less<int>(), 0)),
    it_2 = std::find_if(it_1 + 1, m[i].end(), std::bind2nd(std::less<int>(), 0));
    m[i].erase(it_1 + 1, it_2);
    for(int j = 0; j < m[i].size(); ++j)
      fs << m[i][j] << ' ';
    fs << '0';
  }
  return 0;
}
Содержимое файла примерно такое:
Код
6 3 -3 7 2 1 -8 0 7 3 1 7 6 -5 3 7 0
1
IIIa66uMEM6eP
заставил Бендера
436 / 292 / 10
Регистрация: 05.12.2010
Сообщений: 1,647
Записей в блоге: 6
26.05.2011, 17:06  [ТС] #3
asics, странно - ваши тестовые данные просто стерло из файла..
0
asics
Freelance
Эксперт С++
2848 / 1783 / 144
Регистрация: 09.09.2010
Сообщений: 3,841
26.05.2011, 17:07 #4
Цитата Сообщение от IIIa66uMEM6eP Посмотреть сообщение
2) Дан набор из 10 чисел. Создать две очереди: первая должна содержать числа из исходного набора с нечетными номерами (1, 3, …, 9), а вторая — с четными (2, 4, …, 10); порядок чисел в каждой очереди должен совпадать с порядком чисел в исходном наборе.
Ну тут все елементарней некуда: две очереди; цыкл по последовательности; если нечетное -> пихаем в первый, иначе -> во второй.
Кстате, очередь должна быть самописная или стандартаная ?
0
IIIa66uMEM6eP
заставил Бендера
436 / 292 / 10
Регистрация: 05.12.2010
Сообщений: 1,647
Записей в блоге: 6
26.05.2011, 17:09  [ТС] #5
Цитата Сообщение от asics Посмотреть сообщение
самописная или стандартаная ?
самописная.
0
asics
Freelance
Эксперт С++
2848 / 1783 / 144
Регистрация: 09.09.2010
Сообщений: 3,841
26.05.2011, 17:11 #6
Цитата Сообщение от IIIa66uMEM6eP Посмотреть сообщение
самописная.
Списки, стеки, очереди
1
IIIa66uMEM6eP
заставил Бендера
436 / 292 / 10
Регистрация: 05.12.2010
Сообщений: 1,647
Записей в блоге: 6
26.05.2011, 17:13  [ТС] #7
asics, что скажете про первую задачу? затерает любые данные в файле((
0
asics
Freelance
Эксперт С++
2848 / 1783 / 144
Регистрация: 09.09.2010
Сообщений: 3,841
26.05.2011, 17:16 #8
IIIa66uMEM6eP, Я не знаю как вам показать, что у меня работатет, видео снимать как-то впадлу.
0
IIIa66uMEM6eP
заставил Бендера
436 / 292 / 10
Регистрация: 05.12.2010
Сообщений: 1,647
Записей в блоге: 6
26.05.2011, 20:24  [ТС] #9
asics, объясню ситуацию.. когда кидаю 1.тхт в каталог вместе с файлом проекта - выводит что файл не найден. когда прописываю конкретный путь к файлу, к примеру "c://"input.txt" после выполнения все тестовые данные стерты.. в чем может быть касяк?

Добавлено через 2 часа 11 минут
upd...
0
IIIa66uMEM6eP
заставил Бендера
436 / 292 / 10
Регистрация: 05.12.2010
Сообщений: 1,647
Записей в блоге: 6
07.06.2011, 12:32  [ТС] #10
upd. Не получается с очередью. Задание 2.
Дан набор из 10 чисел. Создать две очереди: первая должна содержать числа из исходного набора с нечетными номерами (1, 3, …, 9), а вторая — с четными (2, 4, …, 10); порядок чисел в каждой очереди должен совпадать с порядком чисел в исходном наборе.
0
IIIa66uMEM6eP
заставил Бендера
436 / 292 / 10
Регистрация: 05.12.2010
Сообщений: 1,647
Записей в блоге: 6
14.06.2011, 18:09  [ТС] #11
что то по 2 заданию.. подскажите почему ошибка в строке else pv->p = mas[i];

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 <cstdlib>
#include <iostream>
#include <cmath>
#include <clocale>
#include <fstream>
#include <windows.h>
#include <algorithm>
#include <string>
#include <stdlib.h>
#include <stdio.h>
#pragma comment(lib,"kernel32.lib") 
using namespace std;
// структура последовательности
struct pos {
   int d;
   pos *p;
};
    // простая очередь.
pos *first(int d){
    int mas[10] = {1,2,3,4,5,6,7,8,9,10};
  pos *pv = new pos;
for (int i=0; i < 10; i++)
{
if (mas[i] % 10) pv->d = mas[i] ;
else  pv->p = mas[i];
} 
  return mas[i];
}
 
int main(int argc, char *argv[])
{
    setlocale (LC_CTYPE, "rus");
 cout << pos.d;
 
    system("PAUSE");
    return EXIT_SUCCESS;
}
Добавлено через 3 часа 24 минуты
upd...
0
xAtom
915 / 740 / 60
Регистрация: 09.12.2010
Сообщений: 1,346
Записей в блоге: 1
14.06.2011, 20:49 #12
pv->p = mas[i];
Ты пытаешься присвоить указателю числовое значение и функция должна возвращать указатель структуры а ты присваиваешь снова число из числового массива, и таким ты образом думаешь будешь добавлять узлы в очередь, смешно.
1
IIIa66uMEM6eP
заставил Бендера
436 / 292 / 10
Регистрация: 05.12.2010
Сообщений: 1,647
Записей в блоге: 6
15.06.2011, 14:33  [ТС] #13
xAtom, подскажи как правильно..

Добавлено через 13 часов 9 минут
upd...

Добавлено через 4 часа 30 минут
xAtom, дружище, помогай если знаешь..
0
Aneron
158 / 157 / 12
Регистрация: 20.04.2010
Сообщений: 570
15.06.2011, 15:37 #14
Цитата Сообщение от xAtom Посмотреть сообщение
pv->p = mas[i];
ты пытаешься указателю типа pos присвоить тип int.

Добавлено через 50 минут
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
#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)
{
    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)
            add(l_2,ptr);
        else
            add(l_3,ptr);
        ptr = ptr->next_elem;
        ++i;
    }
}  
 
int main(int argc, char *argv[])
{
    list * l = 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;
    }
    list * l_1 = new list();
    list * l_2 = new list();
    sort(&l,&l_1,&l_2);
 
    printf("\n\n");
 
    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,647
Записей в блоге: 6
15.06.2011, 16:21  [ТС] #15
Aneron, у вас значения какие то рендомные.. у меня же конкретная очередь(( или я чего то непонял?
0
15.06.2011, 16:21
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
15.06.2011, 16:21
Привет! Вот еще темы с ответами:

Считать данные текстового файла в массив - 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 на языке с++.


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

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

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