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

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

Восстановить пароль Регистрация
 
 
Рейтинг: Рейтинг темы: голосов - 9, средняя оценка - 5.00
syggestor
0 / 0 / 0
Регистрация: 24.06.2013
Сообщений: 19
28.10.2013, 23:08     Вывод числа из файла с двумерным массивом, но только один раз #1
Здравствуйте. уважаемые форумчане.

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

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

1234
1234
1234
1234

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

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

C++ задача на строки на С.Даны 2 слова.Напечатать только те буквы слов,которые встречаются в обоих словах только один раз.
C++ Вывод на екран только двухзначние числа из файла
C++ Напечатать только те буквы слов, котрые встречаются в обоих словах только один раз
C++ Получить все числа, входящие в последовательность только один раз
Написать простую программу на С++ с двумерным массивом, чтобы ввод осуществлялся с клавы и вывод полученной матрицы C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
dzrkot
zzzZZZ...
 Аватар для dzrkot
516 / 346 / 53
Регистрация: 11.09.2013
Сообщений: 1,977
28.10.2013, 23:27     Вывод числа из файла с двумерным массивом, но только один раз #2
создаёшь функцию void , в аргументе твоя единица или то, над чем ты там делаешь дела))
функция открывает файл, считывает его в массив, сравнивая с контрольной 1, если встречает, то записывает вместо неё то что тебе надо, потом записывает этот массив в файл. Массив можно сделать и const, если размерность файла неизвестна, то считать , посчитать размерность, создать через new массив и считывать всё в него.
Ну или взять какие-нибудь готовые библиотечки, если он есть, и не запариваться над этим)
syggestor
0 / 0 / 0
Регистрация: 24.06.2013
Сообщений: 19
29.10.2013, 00:55  [ТС]     Вывод числа из файла с двумерным массивом, но только один раз #3
Прошу прощения, но немного не понимаю конечный синтаксис функции void.
Относительно недавно начал изучать с++, поэтому некоторые вещи мне не очевидны и правильный синтаксис еще не уложился в голове.
Когда я пишу void f (1), то получаю такую ошибку 'f' : illegal use of type 'void' и еще : incomplete type is not allowed.
Вот сам код:

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
#include "stdafx.h"
#include <iostream>
#include <cstdlib>
#include <fstream>
using namespace std;
 
void main() {
 
ifstream in;
ofstream out;
int i;
void f(1);
in.open("Input.txt", ios::in);
out.open("Output.txt", ios::out);
 
 
while(in>>f) {
    if(i == 1)
out<< "sdfsdfs"<<"\n";
}
in.close();
out.close();
 
}
MrGluck
Ворчун
Эксперт С++
 Аватар для MrGluck
4919 / 2662 / 243
Регистрация: 29.11.2010
Сообщений: 7,398
29.10.2013, 01:18     Вывод числа из файла с двумерным массивом, но только один раз #4
Такие вопросы:
1) только числа или буквы и знаки препинания также?
2) можно ли сначала записать все элементы, а потом производить над ними действия и записывать в файл?

Вам в любом случае нужен динамический контейнер, например std::vector. Но я бы советовал std::unordered_set. Это множество, которое хранит уникальные элементы без упорядоченности (а она нам и не нужна). Но если компилятор не поддерживает последний стандарт, то тогда std::set. Он упорядочивает элементы, но также хранит лишь уникальные.

Если STL чуждо, то готовьтесь к нетривиальному решению, ведь тогда придется написать свой аналог самоадресующейся структуры, например бинарного дерева.
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
29.10.2013, 01:19     Вывод числа из файла с двумерным массивом, но только один раз #5
Задание очень расплывчато.
Цитата Сообщение от syggestor Посмотреть сообщение
В нем записан массив, например такой:
Такой - это какой?
Цитата Сообщение от syggestor Посмотреть сообщение
Необходимо взять, допустим, цифру 1,
Допустим - это как понимать?
Цитата Сообщение от syggestor Посмотреть сообщение
и цикл переходил бы к другой цифре (например к 2)
Напримаер - как понимать? Как выбирается цифра (или число?) для перехода?
Цитата Сообщение от syggestor Посмотреть сообщение
пока не использовал бы последнюю цифру
Последнюю цифру в каком смысле?
Нет универсального кода, для универсального формата файла. Всё должно быть точно описано, тогда можно думать, как это сделать.
syggestor
0 / 0 / 0
Регистрация: 24.06.2013
Сообщений: 19
29.10.2013, 07:31  [ТС]     Вывод числа из файла с двумерным массивом, но только один раз #6
Двумерный массив- в теме он описан:
1234
1234
1234
1234

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

Дойдя до правого нижнего угла массива (последнее число массива), ну или до последней цифры, которая бы не использовалась еще ни разу.
dzrkot
zzzZZZ...
 Аватар для dzrkot
516 / 346 / 53
Регистрация: 11.09.2013
Сообщений: 1,977
29.10.2013, 08:27     Вывод числа из файла с двумерным массивом, но только один раз #7
Цитата Сообщение от syggestor Посмотреть сообщение
ifstream in;
ofstream out;
int i;
void f(1);
in.open("Input.txt", ios::in);
out.open("Output.txt", ios::out);
Начнём с того, что функции нельзя определять в других функциях, т.е. до main или после(но тогда нужен её прототип) во вторых выглядит она примерно так
C++
1
2
3
4
void f(int x) // где x - аргумент с которым она вызывается, т.е. 1 2 3 итд 
{
// тело функции
}
а вообще почитай если таких элементарных вещей не знаешь, я так понимаю что это какая-то задача на зачёт в универе)
если вечером будет время то я могу написать готовый код, но условия размыты, т.е. напиши чётко что надо.
ValeryS
Модератор
6373 / 4839 / 440
Регистрация: 14.02.2011
Сообщений: 16,039
29.10.2013, 09:17     Вывод числа из файла с двумерным массивом, но только один раз #8
Цитата Сообщение от MrGluck Посмотреть сообщение
Вам в любом случае нужен динамический контейнер, например std::vector.
абсолютно не нужен
допустим задействованы цифры 0-9

1 создаем булевый массив размером в 10 элементов
2 инициализируем все элементы false
3 считываем из файла цифру
4 проверяем элемент массива на значение (массив[цифра])
если true то к пункту 7
5 записываем в массив значение true
6 выполняем какие то действия
7 проверяем эта последняя цифра в файле, если нет то к пункту 3
8 выход


можно убыстрить этот алгоритм
проверять массив на заполненность,(между 6 и 7 пунктом)
если все цифры уже использованы, а до конца файла еще далеко
C++
1
2
3
4
5
bool res=true;
for(int i=0;i<10;i++)
   res&=arr[i];
if(res)
 // выход
MrGluck
Ворчун
Эксперт С++
 Аватар для MrGluck
4919 / 2662 / 243
Регистрация: 29.11.2010
Сообщений: 7,398
29.10.2013, 12:16     Вывод числа из файла с двумерным массивом, но только один раз #9
Цитата Сообщение от ValeryS Посмотреть сообщение
абсолютно не нужен
допустим задействованы цифры 0-9
так для того и спросил:
Цитата Сообщение от MrGluck Посмотреть сообщение
1) только числа или буквы и знаки препинания также?
условие очень расплывчатое. Я предлагал решение если в файле будут любые символы.
syggestor
0 / 0 / 0
Регистрация: 24.06.2013
Сообщений: 19
29.10.2013, 12:30  [ТС]     Вывод числа из файла с двумерным массивом, но только один раз #10
Вечернем подробно распишу всё, за на работе просто))
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
29.10.2013, 15:30     Вывод числа из файла с двумерным массивом, но только один раз #11
Цитата Сообщение от syggestor Посмотреть сообщение
Двумерный массив- в теме он описан:
1234
1234
1234
1234
Если данные в файле такие, то, для выполнения вашего задания, достаточно обработать, посимвольно, первую строку и на этом зкончить. Такое решение устраивает?

Не по теме:

Задачу сформулировать не можете, а хотите решения...

ValeryS
Модератор
6373 / 4839 / 440
Регистрация: 14.02.2011
Сообщений: 16,039
29.10.2013, 18:50     Вывод числа из файла с двумерным массивом, но только один раз #12
Цитата Сообщение от MrGluck Посмотреть сообщение
так для того и спросил:
Сообщение от MrGluck 1) только числа или буквы и знаки препинания также?
увеличь массив на количество знаков препинания
в идеале можно вообще массив сделать размером в 256,тогда и цифры и буквы и непечатные символы
syggestor
0 / 0 / 0
Регистрация: 24.06.2013
Сообщений: 19
29.10.2013, 19:50  [ТС]     Вывод числа из файла с двумерным массивом, но только один раз #13
alsav22, этот массив лишь примерный...цифры могут быть в рандомном порядке, но длина строки и количество этих строк может быть любым: от 10 символов на строку, до миллиона или двух.
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
29.10.2013, 20:08     Вывод числа из файла с двумерным массивом, но только один раз #14
Пишите:
Цитата Сообщение от syggestor Посмотреть сообщение
например такой:
Спрашиваю:
Цитата Сообщение от alsav22 Посмотреть сообщение
Такой - это какой?
Отвечаете:
Цитата Сообщение от syggestor Посмотреть сообщение
Двумерный массив- в теме он описан:
1234
1234
1234
1234
Теперь оказывается:
Цитата Сообщение от syggestor Посмотреть сообщение
этот массив лишь примерный...цифры могут быть в рандомном порядке, но длина строки и количество этих строк может быть любым: от 10 символов на строку, до миллиона или двух.
Что мешало сразу написать? Даже на уточнение ответили, что вот, как в первом посте. Понимаете, что от того какие данные в файле и как они записаны, всё решение и зависит?
Alex_Skripa
17 / 17 / 1
Регистрация: 16.09.2013
Сообщений: 126
29.10.2013, 20:17     Вывод числа из файла с двумерным массивом, но только один раз #15
Если я правильно понял это задание то alsav абсолютно прав можно просто просмотреть каждую строку посимвольно, если конечно там не может быть пробелов между цифрами,
alsav22
5282 / 4801 / 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;
}
Миниатюры
Вывод числа из файла с двумерным массивом, но только один раз  
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

Как-то так. Прога с извратом Критична пока первая часть этого текста про использование чисел один раз.
MrGluck
Ворчун
Эксперт С++
 Аватар для MrGluck
4919 / 2662 / 243
Регистрация: 29.11.2010
Сообщений: 7,398
29.10.2013, 22:31     Вывод числа из файла с двумерным массивом, но только один раз #18
Цитата Сообщение от ValeryS Посмотреть сообщение
увеличь массив на количество знаков препинания
в идеале можно вообще массив сделать размером в 256,тогда и цифры и буквы и непечатные символы
А есть гарантии в том, что в тексте 256 различных символов и не более? Да и городить все возможные варианты не используя их - бессмысленно.
syggestor
0 / 0 / 0
Регистрация: 24.06.2013
Сообщений: 19
29.10.2013, 22:38  [ТС]     Вывод числа из файла с двумерным массивом, но только один раз #19
Только цифры или буквы с описанием, типа что расположено в массиве по оси икс, а что расположено по оси игрек, какие габариты у кубиков, из которых состоит большой куб. Просто инфа о массиве, которую надо обойти и перейти непосредственно к массиву.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
29.10.2013, 22:47     Вывод числа из файла с двумерным массивом, но только один раз
Еще ссылки по теме:

Выбрать из текста только те символы, которые встречаются в нем только один раз C++
C++ Повторяющиеся числа из первого массива занести во второй массив только один раз
Функции для работы с двумерным массивом: ввод, вывод, транспонирование C++

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

Или воспользуйтесь поиском по форуму:
ValeryS
Модератор
6373 / 4839 / 440
Регистрация: 14.02.2011
Сообщений: 16,039
29.10.2013, 22:47     Вывод числа из файла с двумерным массивом, но только один раз #20
Цитата Сообщение от MrGluck Посмотреть сообщение
А есть гарантии в том, что в тексте 256 различных символов и не более?
вообще то ansi текст состоит из элементов типа char а тот имеет значения 0-255
Цитата Сообщение от MrGluck Посмотреть сообщение
Да и городить все возможные варианты не используя их - бессмысленно.
а я и не предлагал все варианты, я предлагал только цифры(кстати alsav22, реализовал это, только массив не булевый а интовый)
а использовать вектор не бессмыслено???
сначала забили массив потом отсортировали
если хочется контейнеров то в этой задаче Мап сам собой напрашивается

Добавлено через 4 минуты
syggestor,
меняй формат файла не просто безликие цифры а типа такого
слой 1-
куб1:/здесь размеры/
куб2:/здесь размеры/
и потом анализируй файл - это знак слоя : знак куба
ну или какие другие придумай
можно использовать теги(как в HTML)
и логика твоей программы поменяется
т.е сначала продумай формат файла
Yandex
Объявления
29.10.2013, 22:47     Вывод числа из файла с двумерным массивом, но только один раз
Ответ Создать тему
Опции темы

Текущее время: 18:21. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru