|
104 / 15 / 3
Регистрация: 29.11.2010
Сообщений: 335
|
||||||
Двумерный динамический массив: с каждым шагом создаётся дополнительная ячейка23.10.2012, 19:34. Показов 2333. Ответов 13
Метки нет (Все метки)
Здравствуйте!
Сегодня пред мной стала интересная задача. У нас есть строка (вводится пользователем). Идёт парс строки, выделяется нужное и отправляется в массив. Массив нужен динамический. Структура массива:
Мне нужна только часть кода с инициализацией массивом. По-возможности, если вы захотели сделать добро и помочь, опишите в комментариях как можно подробнее. И да -нормальные переменные, а не в одну букву. с меня плюшка
0
|
||||||
| 23.10.2012, 19:34 | |
|
Ответы с готовыми решениями:
13
|
|
Z3JheSBoYXQ=
342 / 237 / 83
Регистрация: 08.07.2012
Сообщений: 577
|
||||||
| 23.10.2012, 20:24 | ||||||
0
|
||||||
|
104 / 15 / 3
Регистрация: 29.11.2010
Сообщений: 335
|
|
| 23.10.2012, 20:41 [ТС] | |
|
ой горе.. если ты у меня попросишь спеть песню, я в ответ на твоё пожелание буду танцевать со стулом. (на спасибку я жмот, ибо ответ не "в туда")
0
|
|
|
Z3JheSBoYXQ=
342 / 237 / 83
Регистрация: 08.07.2012
Сообщений: 577
|
|
| 23.10.2012, 20:55 | |
|
Постановка задачи неполная. Я не телепат. Гадать на кофейной гуще не собираюсь.
p.s. а свои отзывы и прочее оставь себе, не за этим я на этом форуме. dixi
0
|
|
|
104 / 15 / 3
Регистрация: 29.11.2010
Сообщений: 335
|
|||
| 23.10.2012, 21:26 [ТС] | |||
|
Суть задачи такая:
0
|
|||
|
Z3JheSBoYXQ=
342 / 237 / 83
Регистрация: 08.07.2012
Сообщений: 577
|
|
| 23.10.2012, 22:06 | |
|
1
|
|
|
5828 / 3479 / 358
Регистрация: 08.02.2010
Сообщений: 7,448
|
||||||||||||||||||||||
| 24.10.2012, 06:14 | ||||||||||||||||||||||
|
При этом предлагаю следующую структуру программы. Массив символов:
Текущий (сколько сейчас символов в массиве) и максимальный (под сколько символов выделено памяти) размер массива:
1
|
||||||||||||||||||||||
|
104 / 15 / 3
Регистрация: 29.11.2010
Сообщений: 335
|
||||||||||||||||||||||||||||||||
| 24.10.2012, 20:25 [ТС] | ||||||||||||||||||||||||||||||||
Вот смотрите кусок моего кода (собственно пишу калькулятор):
1-создаём вспомогательную динамическую строку tempstring и пишем подходящий символ перед while ввожу
(я так-то и первый динамический вроде не правильно написал а вот со вторым так тут вообще караул) так же вводим указатель где-то над while
0
|
||||||||||||||||||||||||||||||||
|
5828 / 3479 / 358
Регистрация: 08.02.2010
Сообщений: 7,448
|
||||||||||||||||
| 25.10.2012, 06:09 | ||||||||||||||||
|
При этом минимизируется число вызовов realloc, что в общем-то хорошо. На самом деле realloc теоретически может сам оптимизировать выделение памяти, но на это надеяться нельзя (в стандарте это не прописано). В принципе, ты можешь выделять память и по одному элементу, дело твое. При этом действительно необходимость в дополнительной переменной отпадает. Также не вижу необходимости при считывании отдельного числа в переменную tempstring выделять память под отдельную цифру. Можно сразу вычислить длину строки, которая будет представлять число, и выделить память под нее один раз. Вот небольшой пример, демонстрирующий то, что я говорю. Программа читает строки из стандартного потока ввода до тех пор, пока не встретит символ EOT (чтобы его ввести, нужно нажать Ctrl+D на UNIX-системах, либо Ctrl-Z и Enter в Windows), и выводит эти строки в обратном порядке:
Пример ввода:
0
|
||||||||||||||||
|
104 / 15 / 3
Регистрация: 29.11.2010
Сообщений: 335
|
||
| 25.10.2012, 11:38 [ТС] | ||
|
А теперь к делу. Вчера сам дописал всё же блок для получения числа с использованием tempstring. Итак на выходе имеем число: n. Теперь задача состоит в другом: необходимо для каждого нового числа n создавать строку в двумерном массиве. Особенности этого массива -состоит из подмассивов размером в две ячейки -первая ячейка подмассива всегда равна единичке, вторая равна пришедшему из блока числу. -каждая следующая строка (строка это и есть сам подмассив) массива создаётся, если приходит число из блока. То есть, если у нас из блока пришло число n1, то создаётся первая строка массива по шаблону [1;n1] и так далее пока не перестанут приходить числа из блока. Если из блока пришло три числа - n1, n2, n3 двумерный массив будет выглядеть так: [1;n1] [1;n2] [1;n3] Если пришло четыре числа, то ещё добавится [1;n4] Вот такое дело мне ещё нужно провернуть, постараюсь сам, но не откажусь от помощи!
0
|
||
|
5828 / 3479 / 358
Регистрация: 08.02.2010
Сообщений: 7,448
|
|||
| 25.10.2012, 12:54 | |||
|
0
|
|||
|
104 / 15 / 3
Регистрация: 29.11.2010
Сообщений: 335
|
|||||||
| 25.10.2012, 15:57 [ТС] | |||||||
|
Алгоритм такой: часть 1 -получаем строку -выделяем из строки числа -записываем числа в массив чисел типа [1;число] - выделяем из строки операции -записываем операции в массив операций типа [1;операция] часть 2 -начинаем поочерёдно считывать операции из массива операций -находим операцию с высшим рангом -запоминаем её позицию -относительно это позиции идём в массив чисел (Необходимо пояснить: если операция стояла на третьем месте, то соответственно, числа которые в строке стояли около неё имеют третью и четвёртую позицию) -считываем два числа соотв этой операции -производим операцию над числами -записываем результат Обратно в массив чисел, (Необходимо пояснить: если числа стояли на 3 и 4 месте, то результат пишется на 3 место) -меняем 1 на 0 у того числа которое посчитали (Соответственно У четвёртого места значение меняем на 0 вместо 1) - у операции так же ставим 0 - enjoy Добавлено через 1 час 19 минут что-то не создаётся на каждый шаг новая строчка...
0
|
|||||||
|
5828 / 3479 / 358
Регистрация: 08.02.2010
Сообщений: 7,448
|
||
| 26.10.2012, 03:41 | ||
|
Обычно такая задача решается методом рекурсивного спуска (тут можно почитать) либо через трансляцию в выражение в постфиксной нотации (которое уже вычисляется достаточно просто, см. пример).
1
|
||
|
104 / 15 / 3
Регистрация: 29.11.2010
Сообщений: 335
|
||
| 27.10.2012, 00:19 [ТС] | ||
|
Эх успеть бы до воскресенья написать!
0
|
||
| 27.10.2012, 00:19 | |
|
Помогаю со студенческими работами здесь
14
Не создается одномерный динамический массив (XE8) Динамический массив создается только с одним элементом Составить программу , в которой создается одномерний динамический массив
В БД ячейка создается, но значение не записыватся Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога
Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
|
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
|
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога
В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
|
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога
Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
|
|
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 30.01.2026
Содержание блога
Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
|
SDL3 для Android: Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога
Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
|
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования.
Часть библиотеки BedvitCOM
Использованы. . .
|
SDL3 для Android: Загрузка PNG с альфа-каналом с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога
SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
|