0 / 0 / 0
Регистрация: 24.06.2013
Сообщений: 19
1

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

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

Author24 — интернет-сервис помощи студентам
Здравствуйте. уважаемые форумчане.

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

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

1234
1234
1234
1234

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

Заранее благодарю.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
28.10.2013, 23:08
Ответы с готовыми решениями:

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

Задайте массив целых чисел. Вывести только те числа, которые входят в него только один раз
СРОЧНО!!! ПОМОГИТЕ ПОЖАЛУЙСТА,ОЧЕНЬ НУЖНО!!! ЗАРАНИЕ БЛАГОДАРЮ!) Задайте массив целых чисел....

Работа с двумерным массивом. Вывод k-ой строки.
Здравствуйте! Помогите пожалуйста с задачей =) С клавиатуры вводится слово длинной M*N символов....

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

31
zzzZZZ...
527 / 358 / 94
Регистрация: 11.09.2013
Сообщений: 2,041
28.10.2013, 23:27 2
создаёшь функцию void , в аргументе твоя единица или то, над чем ты там делаешь дела))
функция открывает файл, считывает его в массив, сравнивая с контрольной 1, если встречает, то записывает вместо неё то что тебе надо, потом записывает этот массив в файл. Массив можно сделать и const, если размерность файла неизвестна, то считать , посчитать размерность, создать через new массив и считывать всё в него.
Ну или взять какие-нибудь готовые библиотечки, если он есть, и не запариваться над этим)
0
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();
 
}
0
Форумчанин
Эксперт CЭксперт С++
8215 / 5045 / 1437
Регистрация: 29.11.2010
Сообщений: 13,453
29.10.2013, 01:18 4
Такие вопросы:
1) только числа или буквы и знаки препинания также?
2) можно ли сначала записать все элементы, а потом производить над ними действия и записывать в файл?

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

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

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

Дойдя до правого нижнего угла массива (последнее число массива), ну или до последней цифры, которая бы не использовалась еще ни разу.
0
zzzZZZ...
527 / 358 / 94
Регистрация: 11.09.2013
Сообщений: 2,041
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 итд 
{
// тело функции
}
а вообще почитай если таких элементарных вещей не знаешь, я так понимаю что это какая-то задача на зачёт в универе)
если вечером будет время то я могу написать готовый код, но условия размыты, т.е. напиши чётко что надо.
0
Модератор
Эксперт по электронике
8908 / 6677 / 918
Регистрация: 14.02.2011
Сообщений: 23,512
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)
 // выход
0
Форумчанин
Эксперт CЭксперт С++
8215 / 5045 / 1437
Регистрация: 29.11.2010
Сообщений: 13,453
29.10.2013, 12:16 9
Цитата Сообщение от ValeryS Посмотреть сообщение
абсолютно не нужен
допустим задействованы цифры 0-9
так для того и спросил:
Цитата Сообщение от MrGluck Посмотреть сообщение
1) только числа или буквы и знаки препинания также?
условие очень расплывчатое. Я предлагал решение если в файле будут любые символы.
0
0 / 0 / 0
Регистрация: 24.06.2013
Сообщений: 19
29.10.2013, 12:30  [ТС] 10
Вечернем подробно распишу всё, за на работе просто))
0
5498 / 4893 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
29.10.2013, 15:30 11
Цитата Сообщение от syggestor Посмотреть сообщение
Двумерный массив- в теме он описан:
1234
1234
1234
1234
Если данные в файле такие, то, для выполнения вашего задания, достаточно обработать, посимвольно, первую строку и на этом зкончить. Такое решение устраивает?

Не по теме:

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

0
Модератор
Эксперт по электронике
8908 / 6677 / 918
Регистрация: 14.02.2011
Сообщений: 23,512
29.10.2013, 18:50 12
Цитата Сообщение от MrGluck Посмотреть сообщение
так для того и спросил:
Сообщение от MrGluck 1) только числа или буквы и знаки препинания также?
увеличь массив на количество знаков препинания
в идеале можно вообще массив сделать размером в 256,тогда и цифры и буквы и непечатные символы
0
0 / 0 / 0
Регистрация: 24.06.2013
Сообщений: 19
29.10.2013, 19:50  [ТС] 13
alsav22, этот массив лишь примерный...цифры могут быть в рандомном порядке, но длина строки и количество этих строк может быть любым: от 10 символов на строку, до миллиона или двух.
0
5498 / 4893 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
29.10.2013, 20:08 14
Пишите:
Цитата Сообщение от syggestor Посмотреть сообщение
например такой:
Спрашиваю:
Цитата Сообщение от alsav22 Посмотреть сообщение
Такой - это какой?
Отвечаете:
Цитата Сообщение от syggestor Посмотреть сообщение
Двумерный массив- в теме он описан:
1234
1234
1234
1234
Теперь оказывается:
Цитата Сообщение от syggestor Посмотреть сообщение
этот массив лишь примерный...цифры могут быть в рандомном порядке, но длина строки и количество этих строк может быть любым: от 10 символов на строку, до миллиона или двух.
Что мешало сразу написать? Даже на уточнение ответили, что вот, как в первом посте. Понимаете, что от того какие данные в файле и как они записаны, всё решение и зависит?
0
18 / 18 / 3
Регистрация: 16.09.2013
Сообщений: 126
29.10.2013, 20:17 15
Если я правильно понял это задание то alsav абсолютно прав можно просто просмотреть каждую строку посимвольно, если конечно там не может быть пробелов между цифрами,
0
5498 / 4893 / 831
Регистрация: 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
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
Форумчанин
Эксперт CЭксперт С++
8215 / 5045 / 1437
Регистрация: 29.11.2010
Сообщений: 13,453
29.10.2013, 22:31 18
Цитата Сообщение от ValeryS Посмотреть сообщение
увеличь массив на количество знаков препинания
в идеале можно вообще массив сделать размером в 256,тогда и цифры и буквы и непечатные символы
А есть гарантии в том, что в тексте 256 различных символов и не более? Да и городить все возможные варианты не используя их - бессмысленно.
0
0 / 0 / 0
Регистрация: 24.06.2013
Сообщений: 19
29.10.2013, 22:38  [ТС] 19
Только цифры или буквы с описанием, типа что расположено в массиве по оси икс, а что расположено по оси игрек, какие габариты у кубиков, из которых состоит большой куб. Просто инфа о массиве, которую надо обойти и перейти непосредственно к массиву.
0
Модератор
Эксперт по электронике
8908 / 6677 / 918
Регистрация: 14.02.2011
Сообщений: 23,512
29.10.2013, 22:47 20
Цитата Сообщение от MrGluck Посмотреть сообщение
А есть гарантии в том, что в тексте 256 различных символов и не более?
вообще то ansi текст состоит из элементов типа char а тот имеет значения 0-255
Цитата Сообщение от MrGluck Посмотреть сообщение
Да и городить все возможные варианты не используя их - бессмысленно.
а я и не предлагал все варианты, я предлагал только цифры(кстати alsav22, реализовал это, только массив не булевый а интовый)
а использовать вектор не бессмыслено???
сначала забили массив потом отсортировали
если хочется контейнеров то в этой задаче Мап сам собой напрашивается

Добавлено через 4 минуты
syggestor,
меняй формат файла не просто безликие цифры а типа такого
слой 1-
куб1:/здесь размеры/
куб2:/здесь размеры/
и потом анализируй файл - это знак слоя : знак куба
ну или какие другие придумай
можно использовать теги(как в HTML)
и логика твоей программы поменяется
т.е сначала продумай формат файла
0
29.10.2013, 22:47
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
29.10.2013, 22:47
Помогаю со студенческими работами здесь

Проверка что числа встречаются в массиве только один раз
здравствуйте товарищи профессионалы и не очень как бы вы сделали? функция должна возвращать ...

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

Вывести все числа встречающиеся в последовательности только один раз
Dводится последовательность чисел длинной N. Вывести все числа встречающиеся только один раз

Выбрать из файла те символы, которые встречаются в нем только один раз
11 Дан файл, содержащий текст на русском языке. Выбрать из него те символы, которые встречаются в...


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

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

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