Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 11.03.2012, 14:41   #1
DAVID973
Пользователь
 
Регистрация: 10.03.2012
Сообщений: 16
Сообщение функция для очисти определенных элементов массива.

Здравствуйте! такая задача. я создал консольное приложение, в котором на экран выводится массив из 1920 элементов. в этом массиве через каждый промежуток времени изменяются 2 элемента. и каждый раз при изменении элементов приходится очищать экран, изменять в массиве эти элементы и вновь выводить массив. из-за этого происходит мерцание и торможение программы. для очистки экрана я использую Console::Clear(); а есть ли такая функция с помощью которой можно было бы изменять в уже выведеном массиве эти два элемента, не выводя массив заново?
DAVID973 вне форума Ответить с цитированием
Старый 11.03.2012, 14:54   #2
EUGY
Форумчанин
 
Аватар для EUGY
 
Регистрация: 11.07.2010
Сообщений: 914
По умолчанию

WriteConsoleOutputCharacter
EUGY вне форума Ответить с цитированием
Старый 31.03.2012, 11:38   #3
DAVID973
Пользователь
 
Регистрация: 10.03.2012
Сообщений: 16
По умолчанию

А есть ли похожая функция в чистом c++. без win api ? или может её можно как нибудь создать?
DAVID973 вне форума Ответить с цитированием
Старый 31.03.2012, 12:29   #4
_Bers
Старожил
 
Регистрация: 16.12.2011
Сообщений: 2,329
По умолчанию

Цитата:
Сообщение от DAVID973 Посмотреть сообщение
А есть ли похожая функция в чистом c++. без win api ? или может её можно как нибудь создать?
на "чистом" с++ не существует никаких "консолей", "дисплеев", "окошек", и "операционных систем".
_Bers вне форума Ответить с цитированием
Старый 31.03.2012, 16:08   #5
DAVID973
Пользователь
 
Регистрация: 10.03.2012
Сообщений: 16
По умолчанию

Вопрос был такой: как решить данную задачу не используя функций winapi? желательно отвечать по существу: пример кода или способ решения.
DAVID973 вне форума Ответить с цитированием
Старый 31.03.2012, 16:17   #6
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

Цитата:
для очистки экрана я использую Console::Clear();
это уже не чистый С++.
похоже на С++ CLI.
там есть функции установки координат вывода.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 01.04.2012, 06:37   #7
_Bers
Старожил
 
Регистрация: 16.12.2011
Сообщений: 2,329
По умолчанию

Цитата:
Сообщение от DAVID973 Посмотреть сообщение
Вопрос был такой: как решить данную задачу не используя функций winapi? желательно отвечать по существу: пример кода или способ решения.
На "чистом" с++ - никак.
При работе в операционной системе Windows, любые библиотеки, работающие с вводом/выводом в конечном счете дергают winapi.

Ты можешь быть удивлен, но даже всеми любимые printf и std::cout в конечном счете дергают winapi.

То, что ты видишь на дисплее - черненькое окошко, это на самом деле самое обычное окошко Windows, создаваемое средствами winapi.

Сама "консоль" - это программа, запрятанная глубоко в недрах операционной системы. Любые взаимодействия с нею - только через winapi.

Других способов читать/писать попросту не существует.
_Bers вне форума Ответить с цитированием
Старый 01.04.2012, 08:27   #8
Гром
Старожил
 
Аватар для Гром
 
Регистрация: 21.03.2009
Сообщений: 2,193
По умолчанию

_Bers, ага, а еще Hello, world нельзя написать без использования ассемблера. Нет, даже машинных кодов. Все операции, производимые на компьютере, осуществляются через обращение к процессору с помощью соответствующих низкоуровневых команд. Иными словами, на чистом C++ вообще ничего нельзя сделать. Все операции производятся только с помощью команд процессора.

DAVID973, чисто случайно без использования WinAPI или нестандартных библиотек действительно не существует рациональных способов решения данной проблемы. Существует нерациональный - стирать по одному символу, выводя символ '\b', но его стоило бы применять, будь в массиве не больше, скажем, десяти элементов. Иначе - будет почти та же ерунда - очень часто придется стирать сотни и тысячи символов, начиная с конца.
Простые и красивые программы - коды программ + учебник C++
Создание игры - взгляд изнутри - сайт проекта
Тема на форуме, посвященная ему же
Гром вне форума Ответить с цитированием
Старый 01.04.2012, 11:13   #9
_Bers
Старожил
 
Регистрация: 16.12.2011
Сообщений: 2,329
По умолчанию

Цитата:
Сообщение от Гром Посмотреть сообщение
а еще Hello, world нельзя написать без использования ассемблера. Нет, даже машинных кодов.
...

Иными словами, на чистом C++ вообще ничего нельзя сделать. Все операции производятся только с помощью команд процессора.
На с++ можно написать исходный код. Этот код является программой компилятора, согласно которой, он создаст программу для машины.

Только какое отношение это имеет к сабжу?

Цитата:
Сообщение от Гром Посмотреть сообщение
Существует нерациональный - стирать по одному символу, выводя символ '\b'...
Каким образом ты будешь стирать символы, если тебе не доступны функции winapi ?

всякие там std::cout так же дергают winapi. Все эти стандартные плюшки перестанут работать, если запретить winapi.

Более того: вообще, весь файловый ввод/вывод будет полностью парализован, если запретить winapi.

Единственный, нерациональный способ обойтись без winapi - это написать собственные реализации функций ReadFile/WriteFile, и подменить ими оригинальные. Мало того, что не рационально, так ещё идет в разрез с лицензией OS WINDOWS.
_Bers вне форума Ответить с цитированием
Старый 01.04.2012, 11:46   #10
Гром
Старожил
 
Аватар для Гром
 
Регистрация: 21.03.2009
Сообщений: 2,193
По умолчанию

_Bers, все, дошло. Сегодня же первое апреля, потому вы так старательно несете настаиваете на своем.
Цитата:
Только какое отношение это имеет к сабжу?
Цитируя одного умного человека:
Каким образом ты будешь стирать символы, если тебе не доступны команды процессора?
Всякие там std::cout и функции WinAPI используют команды процессора и ассемблер. Все эти стандартные плюшки перестанут работать, если отключить процессор.
Более того: вся работа компьютера будет полностью парализована, если запретить использовать процессор.
Единственный, нерациональный способ обойтись без команд процессора - создать свой процессор с собственной реализацией процессорных команд и заменить им оригинальный. Мало того, что нерационально, так еще идет в разрез с гарантией на компьютер и лицензией IBM.
Простые и красивые программы - коды программ + учебник C++
Создание игры - взгляд изнутри - сайт проекта
Тема на форуме, посвященная ему же
Гром вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
событие для массива созданных элементов areyoudead Общие вопросы Delphi 52 14.10.2014 19:25
Счетчик элементов массива (для модели толпы) mrandrew1990 Общие вопросы Delphi 6 05.03.2012 18:58
Не придумать условие для элементов массива ShadowNecros Помощь студентам 7 14.04.2011 22:12