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

QBasic

Войти
Регистрация
Восстановить пароль
 
Petro29
4 / 4 / 0
Регистрация: 30.04.2016
Сообщений: 108
#1

Заполнить двумерный массив номерами мест, подсчитать количество мест у окон и вывести на экран схему мест - QBasic

22.11.2016, 16:21. Просмотров 226. Ответов 6
Метки нет (Все метки)

В автобусе 6 рядов кресел по 4 места в каждом ряду. Чётные номера находятся у окон.Необходимо заполнить двумерный массив номерами мест, подсчитать количество мест у окон и вывести на экран схему расположения кресел в салоне.


QBasic/QuickBASIC
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
PRINT “                          Автобус”
DIM A$(8, 4)
DATA2,1,3,4,6,5,7,8,10,9DATA11,12,14,13,15,16,18,17DATA19,20,22,21,23,24,26,25DATA27,28,30  (1-й ряд),29 (2-й ряд)DATA31 (3-й ряд),32 (4-й ряд)”
    FOR I = 1 TO  8
    FOR j = 1 TO 4
        READ A$(i, j)
        LOCATE j * 2, I * 4
        PRINT A$(I, j)
REM … Напечатать 2 – й  ряд …
            LOCATE  j * 2,  50
             PRINT A$(j , 2)
NEXT j, i
QBasic/QuickBASIC
1
2
3
4
   2   6   10   14    18   22   26   30 (1-й ряд)          1
   1   5   9      13   17   21   25   29 (2-й ряд)          5
   3   7   11    15   19   23   27   31 (3-й ряд)          9
   4   8   12    16   20   24   28   32 (4-й ряд)          13
Как напечатать, например, второй ряд таблицы и определить количество мест (8 мест)
в этом ряду. У меня он напечатался только наполовину, да и то по вертикали (символ ; -
после PRINT ничего не меняет).
И ещё: как бы весь блок мест автобуса сместить на пробел от строки «Автобус», но не
меняя пробелы ( j * 2 ) между строками.
И ещё такой же вопрос, что и в одномерных массивах:
Зачем в подобных двумерных массивах строка массива «DIM A$(8, 4)»? Без этой
строки всё получается также как и с этой строкой.
Вот такие три проблемы!
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
22.11.2016, 16:21     Заполнить двумерный массив номерами мест, подсчитать количество мест у окон и вывести на экран схему мест
Посмотрите здесь:

QBasic Заполнить массив Y номерами всех четных элементов массива X
Дан двумерный массив A(N,M). Найти произведение и количество положительных.... QBasic
QBasic Как заполнить массив и вывести его на экран
QBasic Заполнить двумерный массив
Определить общее число свободных мест в зрительном зале QBasic
Подсчитать и вывести на количество положительных чисел в массиве QBasic
Массив в 10 элементов заполнить случайными двухзначными числами, вывести на экран сумму четных чисел. QBasic
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
echs
882 / 1077 / 347
Регистрация: 23.10.2013
Сообщений: 5,026
Записей в блоге: 2
22.11.2016, 17:29     Заполнить двумерный массив номерами мест, подсчитать количество мест у окон и вывести на экран схему мест #2
А так лучше? Или нет?

QBasic/QuickBASIC
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
CLS
DIM A(8, 4)
 
PRINT "   AUTOBUS"
PRINT
A(0, 1) = -2
A(0, 2) = -3
A(0, 3) = -1
A(0, 4) = 0
 
FOR i = 1 TO 8
FOR j = 1 TO 4
   A(i, j) = A(0, j) + 4 * i
   PRINT USING "###"; A(i, j);
NEXT j: PRINT
NEXT i: PRINT
END
Petro29
4 / 4 / 0
Регистрация: 30.04.2016
Сообщений: 108
25.12.2016, 11:55  [ТС]     Заполнить двумерный массив номерами мест, подсчитать количество мест у окон и вывести на экран схему мест #3
Вы предложили свою программу. Да, она компактная (прямо таки нана технолгии, но уж очень она заумная. Откуда такое решение то взялось),
пока не очень понятное. К этой программе хотелось бы добавить пробелы
по вертикали и по горизонтали.
А вот по приведённой программе вы ничего не ответили.
А хотелось получить решения на три вопроса!
В автобусе 6 рядов кресел по 4 места в каждом ряду. Чётные номера находятся у окон.
Необходимо заполнить двумерный массив номерами мест, подсчитать количество мест
у окон и вывести на экран схему расположения кресел в салоне.

QBasic/QuickBASIC
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
PRINT “                          Автобус”
DIM A$(8, 4)
DATA2,1,3,4,6,5,7,8,10,9DATA11,12,14,13,15,16,18,17DATA19,20,22,21,23,24,26,25DATA27,28,30  (1-й ряд),29 (2-й ряд)DATA31 (3-й ряд),32 (4-й ряд)”
    FOR I = 1 TO  8
    FOR j = 1 TO 4
        READ A$(i, j)
        LOCATE j * 2, I * 4
        PRINT A$(I, j)
REM … Напечатать 2 – й  ряд …
            LOCATE  j * 2,  50
             PRINT A$(j , 2)
NEXT j, i
QBasic/QuickBASIC
1
2
3
4
   2   6   10   14    18   22   26   30 (1-й ряд)          1
   1   5   9      13   17   21   25   29 (2-й ряд)          5
   3   7   11    15   19   23   27   31 (3-й ряд)          9
   4   8   12    16   20   24   28   32 (4-й ряд)          13
1. Как напечатать, например, второй ряд таблицы. У меня он напечатался только наполовину,
да и то по вертикали (символ ; -после PRINT ничего не меняет).
2. Определить количество мест (8 мест) во втором ряду программой.
3. И ещё: как бы весь блок мест автобуса сместить на пробел от строки «Автобус», но не
меняя пробелы ( j * 2 ) между строками. Строка «Автобус» не печатается. А её надо напечатать.
Вот такие три проблемы!
echs
882 / 1077 / 347
Регистрация: 23.10.2013
Сообщений: 5,026
Записей в блоге: 2
25.12.2016, 14:06     Заполнить двумерный массив номерами мест, подсчитать количество мест у окон и вывести на экран схему мест #4
А так?

QBasic/QuickBASIC
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
CLS
DIM A(8, 4)
 
PRINT "         AUTOBUS"
PRINT
 
A(0, 1) = -2
A(0, 2) = -3
A(0, 3) = -1
A(0, 4) = 0
 
FOR i = 1 TO 8
FOR j = 1 TO 4
   A(i, j) = A(0, j) + 4 * i
   PRINT USING "  ###"; A(i, j);
NEXT: PRINT : PRINT
NEXT
END
...
А это код ваш (переделанный). В нем три ответа на три ваших вопроса.
QBasic/QuickBASIC
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
CLS
DIM A(8, 4)
 
DATA  2,  1,  3,  4
DATA  6,  5,  7,  8
DATA 10,  9, 11, 12
DATA 14, 13, 15, 16
DATA 18, 17, 19, 20
DATA 22, 21, 23, 24
DATA 26, 25, 27, 28
DATA 30, 29, 31, 32
 
PRINT "       AUTOBUS"
 
FOR i = 1 TO 8
FOR j = 1 TO 4
   READ A(i, j)
   LOCATE 2 * i + 2, 4 * j
   PRINT A(i, j)
NEXT j, i
END
Petro29
4 / 4 / 0
Регистрация: 30.04.2016
Сообщений: 108
11.01.2017, 17:55  [ТС]     Заполнить двумерный массив номерами мест, подсчитать количество мест у окон и вывести на экран схему мест #5
Ваше решение переделано на горизонтальную схему мест в автобусе (как в кассах по продажи
билетов). Ну и восемь строк данных заменены на три удлинённые строки. (С оператором LO-
CATE что – то уже понимается).
QBasic/QuickBASIC
1
2
3
4
5
6
7
8
9
10
11
12
13
14
CLS
PRINT “                          А В Т О Б У С”
DIM A (8, 4)
DATA  2, 1, 3, 4, 6, 5, 7, 8, 10, 9, 11, 12
DATA 14, 13, 15, 16, 18, 17, 19, 20, 22, 21
DATA 23, 24, 26, 25, 27, 28, 30, 29, 31, 32
    FOR i = 1 TO  8
    FOR j = 1 TO 4
        READ A (i, j)
        LOCATE j * 2 + 1, I * 4
        PRINT A (I, j)
NEXT j, i 
   PRINT
PRINT “      Кол. мест в автобусе: “; I * j
QBasic/QuickBASIC
1
2
3
4
5
6
7
8
9
10
       А В Т О Б У С
2   6   10   14   18   22   26   30
 
1   5    9    13   17   21   25   29
 
3   7   11   15   19   23   27   31
 
4   8    12   16    20   24   28   32
 
Кол. мест в автобусе:   45

А вот вопросы оставались без ответа:
1 вопрос: Почему количество мест в автобусе 45, а не 32?
2 вопрос: Как напечатать отдельно любой ряд или любой столбец (у меня 2-й ряд печатался
наполовину, да и то по вертикали).
3 вопрос: Как определить количество мест в горизонтальном или в вертикальном ряду.
4 вопрос: Как определить сумму значений элементов массива в горизонтальном или в верти-
кальном ряду (ведь может быть любой двумерный массив со своими значениями).
5 вопрос: Как определить сумму значений всех элементов массива.

Добавлено через 33 секунды
И ещё: сделана программа с указанием рядов по горизонтали (можно и по вертикали).
Два нижних ряда выполнены с дополнительными двумя циклами.

………………………………………….
QBasic/QuickBASIC
1
2
3
4
5
6
7
8
9
10
11
12
13
14
     LOCATE j * 2 + 1, I * 5
     PRINT A(I, j)
NEXT j, i
  DIM B$(8)
  DATA1-й”,2-й”,3-й”,4-й”,5-й”,6-й”,7-й”,8-й”
     FOR k = 1 TO 5
        READ B$(k)
     LOCATE 11, k * 5
     PRINT “  “;  B$(k)
     NEXT k
          FOR p = 1 TO 8
          LOCATE 12, p * 5
          PRINT “  ряд “
          NEXT p
……………………………………
QBasic/QuickBASIC
1
2
3
4
    4      8     12    16   20    24    28    32   
 
    1-й  2-й  3-й  4-й  5-й   6-й   7-й  8-й
    ряд  ряд  ряд  ряд  ряд  ряд  ряд  ряд
А если выполнять эти два нижних ряда с одним дополнительным циклом, то получается, что второй ряд дублируется, причём слишком низко от двух нижних рядов.
А почему так – не понятно. Вот как это выглядит у меня (фрагменты низа программы):

……………………………………………..
QBasic/QuickBASIC
1
2
3
4
5
6
7
8
9
10
11
     LOCATE j * 2 + 1, I * 5
     PRINT A(i, j)
NEXT j, i
   DIM B$(8, 2)
   DATA1-й”,”ряд”,2-й”,”ряд”,3-й”,”ряд”,4-й”,”ряд”
   DATA5-й”,”ряд”,6-й”,”ряд”,7-й”,”ряд”,8-й”,”ряд”
       FOR k = 1 TO 8
       FOR p = 1 TO 2
           READ B$(k, p)
        LOCATE p * 11, k * 5
        PRINT “  “
Добавлено через 52 секунды
QBasic/QuickBASIC
1
2
3
4
5
      ………………………………………………
     4     8     12     16     20     24     28     32
 
      1-й   2-й   3-й   4-й   5-й   6-й   7-й   8-й
      ряд  ряд  ряд  ряд  ряд  ряд   ряд  ряд



ряд ряд ряд ряд ряд ряд ряд ряд














А если в конце программы поставить END, то выход такой:

QBasic/QuickBASIC
1
2
3
4
5
6
7
8
  ………………………………………………
     4     8     12     16     20     24     28     32
 
      1-й   2-й   3-й   4-й   5-й   6-й   7-й   8-й
      
 
 
     ряд  ряд  ряд  ряд  ряд  ряд  ряд  ряд
То же не понятно.
echs
882 / 1077 / 347
Регистрация: 23.10.2013
Сообщений: 5,026
Записей в блоге: 2
11.01.2017, 18:47     Заполнить двумерный массив номерами мест, подсчитать количество мест у окон и вывести на экран схему мест #6
Petro29
Отвечаю на первый ваш вопрос. Почему 45, а не 32?
1. Вы печатаете произведение i*j
i изменяется до 8
j изменяется до 4
Чтобы произошел выход из цикла параметр должен
быть на единицу (шаг равен 1) больше его максимального
значения. То есть i = 9, a j = 5. Умножаем 9 на 5 = 45
Вывод: считать надо (i - 1)*(j - 1)
...
Как печатать?
Одно из двух
1. Либо вы меняете местами параметры циклов
2. Либо это делаете в операторе LOCATE.
Именно это и не дает вам все распечатать
(я уже привел вам пример)
...
Вопрос 3 прост. Вы сами задаёте количество мест.
...
Вопрос 4. Определение суммы элементов в строке
(допустим в первой строке). То есть надо произвести
сложение A(1, 1) + A(1, 2) + A(1, 3) + ... + A(1, n)
...
Вопрос 5. Сумма всех элементов
QBasic/QuickBASIC
1
2
3
4
5
FOR i = 1 TO 8
FOR j = 1 TO 4
   SUMMA = SUMMA + A(i, j)
NEXT
NEXT
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
11.01.2017, 21:11     Заполнить двумерный массив номерами мест, подсчитать количество мест у окон и вывести на экран схему мест
Еще ссылки по теме:

Заполнить двумерный массив нулями и единицами в шахматном порядке QBasic
Заполнить и напечатать массив, подсчитать сумму элементов, лежащих выше главной диагонали, построить заданные окружности QBasic
Заполнить литерный массив заглавными английскими буквами и подсчитать количество букв QBasic
Образовать двумерный массив Q(5*5) и вывести его на экран QBasic
QBasic Составить программу нахождения в двухмерном массиве элементов, кратных 7 и вывести на экран с их номерами

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

Или воспользуйтесь поиском по форуму:
кот Бегемот
Платежеспособный зверь
8013 / 3732 / 666
Регистрация: 28.10.2009
Сообщений: 9,491
11.01.2017, 21:11     Заполнить двумерный массив номерами мест, подсчитать количество мест у окон и вывести на экран схему мест #7
Цитата Сообщение от Petro29 Посмотреть сообщение
В автобусе 6 рядов кресел по 4 места в каждом ряду
Цитата Сообщение от Petro29 Посмотреть сообщение
Почему количество мест в автобусе 45, а не 32?
Потому что 6 умножить на 4=24
Yandex
Объявления
11.01.2017, 21:11     Заполнить двумерный массив номерами мест, подсчитать количество мест у окон и вывести на экран схему мест
Ответ Создать тему
Опции темы

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