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

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

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 9, средняя оценка - 5.00
syggestor
0 / 0 / 0
Регистрация: 24.06.2013
Сообщений: 19
#1

Вывод числа из файла с двумерным массивом, но только один раз - C++

28.10.2013, 23:08. Просмотров 1241. Ответов 31
Метки нет (Все метки)

Здравствуйте. уважаемые форумчане.

Имеется такая проблема (в литературе пока решения не встречал и в интернетах тоже).

Есть инпут файл в расширении "тхт". В нем записан массив, например такой:

1234
1234
1234
1234

Необходимо взять, допустим, цифру 1, выполнить над ней какое-нить действие (оно абсолютно не важно) и записать результат в аутпут файл.
НО!
Необходимо, чтобы действие производилось только над первой встреченной единицей, а последующие единицы исключались и цикл переходил бы к другой цифре (например к 2) и ее тоже использовал лишь один раз, пока не использовал бы последнюю цифру и не завершался бы.

Заранее благодарю.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
28.10.2013, 23:08
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Вывод числа из файла с двумерным массивом, но только один раз (C++):

Получить все числа, входящие в последовательность только один раз - C++
Даны массив целых чисел. Получить все числа, входящие в последовательность только один раз.

Выбрать из файла те символы, которые встречаются в нем только один раз - C++
#include <iostream> #include <fstream> #include <algorithm> #include <string> #include <Windows.h> using namespace std; ...

Функции для работы с двумерным массивом: ввод, вывод, транспонирование - C++
Написать функции для работы с двумерным массивом. Первая - для ввода элементов массива. Вторая - для вывода на экран элементов массива в...

Повторяющиеся числа из первого массива занести во второй массив только один раз - C++
#include <stdio.h> #include <iostream> #include <cstdlib> using namespace std; int main(int argc, char* argv) { int...

Выбрать из текста только те символы, которые встречаются в нем только один раз - C++
Здравствуйте, помогите пожалуйста написать программу:) Условие. Дана строка, содержащая текст на русском языке. Выбрать из него только те...

Напечатать только те буквы слов, котрые встречаются в обоих словах только один раз - C++
Помогите решить в Borland c++ Если можно еще блок-схему Заданы два слова. Напечатать только те буквы слов, котрые встречаются в...

31
alsav22
5426 / 4821 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
29.10.2013, 21:31 #16
В файле:
3982345923
0432145
33333333333333
0912343456
71209
45321234567890
12345
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
#include <iostream>
#include <fstream>
using namespace std;
 
void f(char ch)
{
    cout << ch << ' ';
}
 
int main ()
{
    ifstream fin("dat.txt");
    if (fin)
    {
        int digit[10] = {0};
        char ch;
        int n = 0;
        while (fin >> ch)
        {
            if (digit[ch - '0'] == 0)
            {
                digit[ch - '0'] = 1;
                f(ch);
                ++n;
                if (n == 10) break;
            }
            else continue;
        }
    }
    else cout << "Error!" << endl;
    
    cout << endl;
    
    system("pause");
    return 0;
}
0
Миниатюры
Вывод числа из файла с двумерным массивом, но только один раз  
syggestor
0 / 0 / 0
Регистрация: 24.06.2013
Сообщений: 19
29.10.2013, 22:17  [ТС] #17
dzrkot, пишу условие более развёрнуто.

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

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

Теперь необходимо (в идеале), чтобы она могла:

1) пропустить всякий текст и цифры, которые могут быть написаны выше исходного массива типа:

тра-ля-ля
12.10.2005

1234
2431
3241
1243

и начать работать непосредственно с массивом. То-есть, чтобы могла пропустить весь мусор, написанный до массива (удалять этот мусор в ручную не резонно).

2) необходимо, чтобы прога брала число из массива, превращала его, например вот в это:

рр 1212
пп 235

записывала этот результат в другой текстовый файл. Далее, чтобы исходное число исключалось из рассмотрения и прога переходила бы к другому числу (всего чисел будет четыре: 1, 2, 3 и 4). И, допустим, если следом за единицей шла бы двойка, ну или четверка (это не важно), то над ней производилось бы свое действие и результат записывался бы следом за предыдущим результатом как-то так:

рр 1212
пп 235

вв 15788
уу 5221
л1 45874

ну и т.п.

Т.е. каждому числу исходного массива соответствует определенный набор букв и цифр.

Это пока текущая задача.

Далее прога должна уметь вот что.
Имеется некая фигура в пространстве (например куб). Куб нарублен на маленькие кубики, имеющие размер стенок, например, 1 см. Каждому кубику соответствует число, отражающее цвет этого кубика. Массив строится по принципу:

В строку пишутся цифры по икс.
В столбик-по у.
Допустим:

1234
1234

По икс тут идет 1234, по игрек 11, 22, 33, 44. Далее идет следующий слой:

1)1234
2)1234
3)1234
4)1234

Тут уже 2 слоя- второй слой начинается с третьей строки. Расстояние между слоями, как мы помним-1 см. Именно это расстояние придает этим плоскостям объем.
Массив может иметь разное количество чисел по оси x и по y, если речь идет о параллелепипеде. Но рассматриваем куб.
Необходимо, чтобы прога оценивала количество кубиков (цифр) в ряду, понимала координату каждого кубика, например, координата левого верхнего кубика: i=1, j=1; а следующий элемент имеет координату i=1, j=2. Ну и зная размеры кубиков, чтобы прога могла определить расстояние до левой грани от нуля (который расположен либо на правой грани, либо в центре куба….-без разницы). Это же касается и правой грани и верхней и нижней и дальней от нас и ближней к нам. Результат записать примерно так:

По оси x левая грань расположена в R см от нуля (где R – динамическая величина и зависит от количества чисел в массиве).
По оси y левая грань расположена в R см от нуля (где R – динамическая величина и зависит от количества чисел в массиве).

рр 1212
пп 235

вв 15788
уу 5221
л1 45874

Как-то так. Прога с извратом Критична пока первая часть этого текста про использование чисел один раз.
0
MrGluck
Модератор
Эксперт CЭксперт С++
7490 / 4605 / 691
Регистрация: 29.11.2010
Сообщений: 12,589
29.10.2013, 22:31 #18
Цитата Сообщение от ValeryS Посмотреть сообщение
увеличь массив на количество знаков препинания
в идеале можно вообще массив сделать размером в 256,тогда и цифры и буквы и непечатные символы
А есть гарантии в том, что в тексте 256 различных символов и не более? Да и городить все возможные варианты не используя их - бессмысленно.
0
syggestor
0 / 0 / 0
Регистрация: 24.06.2013
Сообщений: 19
29.10.2013, 22:38  [ТС] #19
Только цифры или буквы с описанием, типа что расположено в массиве по оси икс, а что расположено по оси игрек, какие габариты у кубиков, из которых состоит большой куб. Просто инфа о массиве, которую надо обойти и перейти непосредственно к массиву.
0
ValeryS
Модератор
6707 / 5116 / 482
Регистрация: 14.02.2011
Сообщений: 17,188
29.10.2013, 22:47 #20
Цитата Сообщение от MrGluck Посмотреть сообщение
А есть гарантии в том, что в тексте 256 различных символов и не более?
вообще то ansi текст состоит из элементов типа char а тот имеет значения 0-255
Цитата Сообщение от MrGluck Посмотреть сообщение
Да и городить все возможные варианты не используя их - бессмысленно.
а я и не предлагал все варианты, я предлагал только цифры(кстати alsav22, реализовал это, только массив не булевый а интовый)
а использовать вектор не бессмыслено???
сначала забили массив потом отсортировали
если хочется контейнеров то в этой задаче Мап сам собой напрашивается

Добавлено через 4 минуты
syggestor,
меняй формат файла не просто безликие цифры а типа такого
слой 1-
куб1:/здесь размеры/
куб2:/здесь размеры/
и потом анализируй файл - это знак слоя : знак куба
ну или какие другие придумай
можно использовать теги(как в HTML)
и логика твоей программы поменяется
т.е сначала продумай формат файла
0
MrGluck
Модератор
Эксперт CЭксперт С++
7490 / 4605 / 691
Регистрация: 29.11.2010
Сообщений: 12,589
29.10.2013, 23:15 #21
Цитата Сообщение от ValeryS Посмотреть сообщение
ansi текст
а юникод?
Цитата Сообщение от ValeryS Посмотреть сообщение
если хочется контейнеров то в этой задаче Мап сам собой напрашивается
Цитата Сообщение от MrGluck Посмотреть сообщение
я бы советовал std::unordered_set.
Цитата Сообщение от MrGluck Посмотреть сообщение
Но если компилятор не поддерживает последний стандарт, то тогда std::set.
Вариант, предложенный вами и aslav22 я сам использовал не раз на С, но тут задание слишком расплывчато. Я ведь даже реализации не дал, лишь задал вопросы и сделал предположение. Вы прочитали из моего поста лишь первое предложение, увидели слово вектор и набросились. Да в конце-концов, все, что работает на массиве, будет работать и с вектором.
0
ValeryS
Модератор
6707 / 5116 / 482
Регистрация: 14.02.2011
Сообщений: 17,188
29.10.2013, 23:24 #22
Цитата Сообщение от MrGluck Посмотреть сообщение
Да в конце-концов, все, что работает на массиве, будет работать и с вектором.
ну если учесть что вектор это и есть массив, правда динамический, то конечно будет
вот из за этой "динамики" я, как ты выражаешься, и "набросился"
или выделять место под вектор сразу,тогда что массив что вектор одно и тоже,нечего копья ломать
а если выделять динамически то тормоза, перераспределение памяти дорогого стоит
и потом ты предлагал проверять вектор нет ли там такого числа, если нет вносить число в вектор
это сколько проходов будет???
или я не правильно понял твой алгоритм?
0
alsav22
5426 / 4821 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
29.10.2013, 23:29 #23
Цитата Сообщение от syggestor Посмотреть сообщение
этот массив лишь примерный...цифры могут быть в рандомном порядке,
Цитата Сообщение от syggestor Посмотреть сообщение
2) необходимо, чтобы прога брала число из массива
Теперь уже не цифры, а числа... Т.е. разницы никакой? Потом ещё что-то добавится, и так до бесконечности...
0
MrGluck
Модератор
Эксперт CЭксперт С++
7490 / 4605 / 691
Регистрация: 29.11.2010
Сообщений: 12,589
29.10.2013, 23:40 #24
Цитата Сообщение от ValeryS Посмотреть сообщение
а если выделять динамически то тормоза, перераспределение памяти дорогого стоит
как будто перераспределять будет каждый раз.
Говоря по вашему, 256 элементов - дело незаметное.
Цитата Сообщение от ValeryS Посмотреть сообщение
или я не правильно понял твой алгоритм?
про это:
map - заполнение и удаление
У вас все в кучу. Да и там это был намек на дальнейшую реализацию map, которую я привел несколькими постами ниже.
0
ValeryS
Модератор
6707 / 5116 / 482
Регистрация: 14.02.2011
Сообщений: 17,188
29.10.2013, 23:52 #25
Цитата Сообщение от MrGluck Посмотреть сообщение
про это:
не я в ту тему вообще не полез
Цитата Сообщение от MrGluck Посмотреть сообщение
Говоря по вашему, 256 элементов - дело незаметное.
"при современном развитии печатного дела на западе"(с) точнее при современной памяти
256 байт такой пустяк
а можно было и битовые поля использовать

Не по теме:


ну ладно не поняли друг друга, с кем не бывает
мир?
Я заметил на этом форуме так бывает
задается простой вопрос, потом баталии на несколько страниц, алгоритмы,методики,и еще куча всего
а ТС сидит и думает "Ребята вы чего? я хотел "здравствуй мир"написать"

1
MrGluck
Модератор
Эксперт CЭксперт С++
7490 / 4605 / 691
Регистрация: 29.11.2010
Сообщений: 12,589
29.10.2013, 23:57 #26

Не по теме:

Цитата Сообщение от ValeryS Посмотреть сообщение
мир?
однозначно
Ну, как говорится, в споре рождается истина. Мы накидали идей. Что бы там в задании в конечном счете ни было, ход мысли возможно поможет ТС-у.



Добавлено через 26 секунд
P.S. а точную формулировку задания я так и не понял.
1
ValeryS
Модератор
6707 / 5116 / 482
Регистрация: 14.02.2011
Сообщений: 17,188
30.10.2013, 00:06 #27
Цитата Сообщение от MrGluck Посмотреть сообщение
P.S. а точную формулировку задания я так и не понял.
а её и нет
есть мысли вслух, хотелось бы того и этого
даже для себя не плохо точное ТЗ писать, иначе можно всю жизнь одну программу создавать
нет предела совершенству
0
syggestor
0 / 0 / 0
Регистрация: 24.06.2013
Сообщений: 19
30.10.2013, 00:20  [ТС] #28
ValeryS, считаем, что чисел в строке 10, строк 10, слоёв 2 (т.е. наборов 10х10 идущих друг за другом). Цветов 4. Из этих цифр и состоит этот массив, просто они рандомно в нем распределены. Для всей фигуры слоев будет больше. Общая структура аутпута такова:

Ячейка 1: 1 -1 23 -11 24 22 -25
Ячейка 2: 3 -2 1 -11 24 22 -25
.
.
.
Ячейка 200: 2 -10 9 -20 19 -21 25

1 px 1
2 px 2
3 px 3
4 px 4
5 px 5
6 px 6
7 px 7
8 px 8
9 px 9
10 px 10
11 py 1
12 py 2
13 py 3
14 py 4
15 py 5
16 py 6
17 py 7
18 py 8
19 py 9
20 py 10
21 pz 1
22 pz -1
23 px 0
24 py 0
25 pz 0

1 Цвет 1
2 Цвет 2
3 Цвет 3
4 Цвет 4

Конец файла

Описание файла:
Рассмотрим два слоя. Положительное направление Ox направлено вправо, Oy вверх, Oz смотрит от нас.

Плоскости, перпендикулярные осям (эти плоскости как бы отсекают стороны малых кубов в каждом слое) задаются так: px (она перпендикулярна оси x), далее через пробел пишется знак «минус», если плоскость находится на отрицательной стороне оси, либо не пишется и тогда плоскость находится на положительной стороне. Далее записывается расстояние от нуля в сантиметрах, миллиметрах и т.п. Аналогичным образом дела обстоят с Оy и Oz. Хоть плоскости и стоят вторыми после ячеек, построение начинается именно с них (плоскостей).

Над плоскостями записываются ячейки.
Они как бы формируются из записанных плоскостей. Мы указываем: с какой стороны от данной плоскости находится ячейка. Наличие или отсутствие «минуса» как и в случае с плоскостями указывает на то, с какой стороны от плоскости находится ячейка (с положительной или отрицательной). Здесь первое число (1) показывает номер цвета (записан в третьем разделе под плоскостями), через пробел начинается ограничивание ячейки: Ячейка 1 находится в отрицательном направлении к плоскости под номером 1, в положительном направлении к плоскости номер 23 и т.д.

Разделы отделяются пустой строкой.

В результате мы имеем 2 слоя ячеек во второй четверти оси координат (x,y).
0
ValeryS
Модератор
6707 / 5116 / 482
Регистрация: 14.02.2011
Сообщений: 17,188
30.10.2013, 00:28 #29
Цитата Сообщение от syggestor Посмотреть сообщение
ValeryS, считаем, что чисел в строке 10, строк 10, слоёв 2
при создании ТЗ слово считаем запрещено, так же как и допустим
далее расшифруй что означают эти числа
Цитата Сообщение от syggestor Посмотреть сообщение
Ячейка 1: 1 -1 23 -11 24 22 -25
Цитата Сообщение от syggestor Посмотреть сообщение
Из этих цифр и состоит этот массив,
во первых ты цифры с числами не путаешь?
во вторых цифры это абстрактное понятие, что они означают?
координаты? размер? цвет?
0
syggestor
0 / 0 / 0
Регистрация: 24.06.2013
Сообщений: 19
30.10.2013, 00:47  [ТС] #30
Цифра: 0123456789
Число:10 15 25 79 и т.д.
Номер- это число, которое мы присвоили плоскости, ячейке или цвету, чтобы сама ячейка обратилась к нему.
Слова "Цвет 1", "Цвет 2" и т.д. можно заменить на набор цифр, если угодно. Главное, чтобы перед цветом шел его номер, к которому и обращается ячейка.
В строке массива может быть до миллиона распределенных рандомно цифр от 1 до 4, , например: 1112343124...., смотря какое разбиение будет необходимо (поэтому хорошо бы, чтобы прога определяла сама длину строк и столбцов массива в инпут файле).
Цифры в инпут файле записаны без пробелов.
0
30.10.2013, 00:47
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
30.10.2013, 00:47
Привет! Вот еще темы с ответами:

Напечатать только те буквы слов, которые встречаются в обоих словах только один раз - C++
Пожалуйста помогите!!!!задача на строки на С.Даны 2 слова.Напечатать только те буквы слов,которые встречаются в обоих словах только один...

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

Вывод из файла только те числа, которые делятся на 5 - C++
Здравствуйте! Помогите мне пожалуйста! Я записал в файл числа: 2,1,4,3,6,5,8,7......100,99. Прочитал этот файл. И теперь мне нужно...

Проблема с массивом. Выводится только один элемент матрицы. - C++
Здравствуйте. Программа должна считывать данные из файла (матрицу 128х128), записывать их в двумерный массив и выводить на экран. Я...


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

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

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