Форум программистов, компьютерный форум, киберфорум
QBasic
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.75/8: Рейтинг темы: голосов - 8, средняя оценка - 4.75
Заблокирован
1

Перестановка элементов массива

18.04.2014, 17:39. Показов 1603. Ответов 5
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Я уже порешал немало задач на QBasic
И обратил внимание на некоторые ошибки, которые
делаются в силу недостаточных знаний о QBasic.
Приведу лишь некоторые.
1) перестановка элементов массива
Вам не удастся так просто переставить элементы массива
в цикле если вы не позовете на помощь другой массив.
Привожу пример того, как НЕ НАДО ДЕЛАТЬ !!
QBasic/QuickBASIC
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
DEFINT A, I, M
OPTION BASE 1
DIM A(5)
CLS
FOR i = 1 TO 5
   A(i) = i ^ 2
   PRINT A(i);
NEXT i
PRINT
 
FOR i = 1 TO 5
   SWAP A(i), A(6 - i)
   PRINT A(i);
NEXT i
PRINT
 
FOR i = 1 TO 5
   PRINT A(i);
NEXT i
PRINT
 
SWAP A(1), A(5)
PRINT A(1); A(5)
END
QBasic СОХРАНЯЕТ свой массив изо всех сил.
2) ещё ошибка
Если вы используете суффиксы, например пишет x%, то это
надо применять везде переменная вида x - не пройдёт
Это ошибка о которой QBasic не сообщает.
3) вот ещё коварная ошибка
Ради бога, объявляйте типы переменных. В противном случае
вы можете нарваться на такую неприятность. Допустим
переменная x должна быть целой (как вы хотите), но она используется
как вещественная переменная и тогда, предположим вы ждёт
результат x=2, а получается x=2.000001. Вы скажете. Ничего страшного
Как знать! Если такое случится в середине программы, то она выдаст вам
на гора такое, что мало не покажется!!
4) Судя по программам, видно, что многие уже познакомились с тем,
что кодировка DOS и Windows штука неприятная. Как писать??
По-русски или латинскими буквами. Тут я не даю совета. Кто хочет
выучить QBasic, тот выучит!!
Успехов всем!
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
18.04.2014, 17:39
Ответы с готовыми решениями:

Одномерные массивы. Вставка, удаление элементов массива. Перестановка элементов массива. Сортировка массива методом пузырька
Помогите пожалуйста! Дан массив, состоящий из N букв латинского алфавита а) Заполнить массив...

Перестановка элементов массива без использования дополнительного массива
Дан массив целых чисел, содержащий 10 элементов, записать в этот же массив сначала все...

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

Перестановка элементов массива
Переставить элементы массива так, чтобы сначала шли все отрицательные элементы массива, затем все...

5
1045 / 315 / 74
Регистрация: 13.07.2013
Сообщений: 1,270
18.04.2014, 18:37 2
Цитата Сообщение от gehh Посмотреть сообщение
Вам не удастся так просто переставить элементы массива
в цикле если вы не позовете на помощь другой массив.
Привожу пример того, как НЕ НАДО ДЕЛАТЬ !!
А, собственно, почему? QBasic четко выполнил Ваш код. Просто не нужно опять менять местами элементы.

Не по теме:

Если не понятно сказал:
Поменяйте цифру 5 (строка 11) на 3.

1
5001 / 1673 / 409
Регистрация: 25.04.2010
Сообщений: 4,625
Записей в блоге: 2
18.04.2014, 19:09 3
Лучший ответ Сообщение было отмечено Памирыч как решение

Решение

Вам не удастся так просто переставить элементы массива
По пунктам:

1) Что подразумевается под словом переставить? Чтобы обменять любые 2 элемента
существует оператор SWAP. Всё зависит от правильности алгоритма. К примеру в
алгоритмах сортировки лишний массив не нужен, и тем не менее возможно переставить
все элементы массива в разные места.

2) Способов типизации в QB много, вы как вижу очень любите через DEF.
На этот счёт стандартов нет абсолютно никаких. Раньше я использовал
суффиксы, сейчас нет, но этому есть причины - для того чтобы видеть какие
переменные используются в алгоритме и быстро портировать программу на
требуемый диалект. Но подчёркиваю каждый программист волен делать так
как ему удобно.

3) Дефолтные типы диалектов надо просто знать. Пользоваться этим тоже
никто не запрещает.

4) Каверзный вопрос. Могу дать совет - тут на форуме лучше использовать транслит.
Надёжный вариант: использовать свои процедуры печати либо вручную программировать
знакогенератор(для текстового режима относительно несложный вариант, для графики
- читаем статьи с WASM, но я бы не советовал, мало у кого есть нормальный парк
оборудования для тестирования). Программируя под DOS вообще проблем особых с
кодировками не возникает(не беру в рассчёт DOSBox и запуск через NTVDM).
Вот под Windows совсем другое дело, костылей надо много, потому что редакторы кода
работают в одной кодировке, сам юзаешь другую, а программа и функции работы с
файловой системой накладывают свои ограничения, получается тихий писец.
Поэтому есть среды, где всё заточено под системный Unicode и там безусловно меньше
проблем. Лично я за унификацию в этом плане.
2
Заблокирован
19.04.2014, 10:28  [ТС] 4
Дорогой Good-Morning, вы ошибаетесь.
Я не случайно вставил указанный вами код.
Вас ввёл в заблуждение оператор PRINT (и не только вас)
У меня уже была аналогичная задача, но без PRINT.
И я долго ломал голову, пытаясь найти ошибку.
Спасибо вам!
0
1045 / 315 / 74
Регистрация: 13.07.2013
Сообщений: 1,270
19.04.2014, 15:39 5
Лучший ответ Сообщение было отмечено gehh как решение

Решение

Цитата Сообщение от gehh Посмотреть сообщение
Дорогой Good-Morning, вы ошибаетесь.
Для чего же нужен третий Print? Он выводит получившийся массив, там хорошо видно (при вышеуказанной поправке), что массив повернулся верно. А Вы, прогоняя весь массив через 2-ой цикл, поворачиваете его 2 раза.

Добавлено через 12 минут
Если же Вы до сих пор не верите, попробуйте данный код:
QBasic/QuickBASIC
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
CLS
DIM a(1 TO 10)
FOR i = 1 TO 10
    a(i) = i
NEXT
GOSUB pr
FOR i = 1 TO 10
    SWAP a(i), a(11 - i)
    GOSUB pr
NEXT
END
pr:
FOR j = 1 TO 10
    PRINT a(j);
NEXT
PRINT
RETURN
Проследите за изменением массива. А теперь во втором цикле поменяйте "10" на "5" и опять проследите.
1
Заблокирован
19.04.2014, 15:45  [ТС] 6
Вы компьютерный гений!! Я не боюсь признать своё заблуждение.
Да, я ошибся и очень крупно. Действительно сделав дважды
перестановку, посчитал ее за одну. Ошибки надо исправлять.
Однако я привёл правильный пример того, как не надо делать.
Если бы я мог, то нажал бы кнопку "Спасибо" 1000 раз!!
Спасибо! Это лучший ответ! Он будет мне уроком!
0
19.04.2014, 15:45
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
19.04.2014, 15:45
Помогаю со студенческими работами здесь

Перестановка элементов массива
Здравствуйте Запишите подряд в массив A(N) элементы заданного массива B(2N), стоящие на четных...

Перестановка элементов массива
Я новичок в С++ , и мне нужна помощь опытных в этой сфере людей! Смотрите, мне надо переставить...

Перестановка элементов массива
Задан массив A размером n . Разместить наименьший элемент на первом месте , наименьший среди...

Перестановка элементов массива
Подскажите пожалуйста, как переставить элементы массива в указанного по указанный!!!


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

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