Форум программистов, компьютерный форум, киберфорум
QBasic
Войти
Регистрация
Восстановить пароль
 
Рейтинг 5.00/4: Рейтинг темы: голосов - 4, средняя оценка - 5.00
196 / 8 / 3
Регистрация: 30.04.2016
Сообщений: 733
1

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

22.11.2016, 16:21. Просмотров 678. Ответов 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)»? Без этой
строки всё получается также как и с этой строкой.
Вот такие три проблемы!
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
22.11.2016, 16:21
Ответы с готовыми решениями:

Заполнить двумерный массив номерами мест и напечатать схему заполнения зрительного зала
: В кинотеатре 7 рядов по 5 мест в каждом и заняты только нечётные места. Заполнить двумерный...

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

Вычислить суммарное количество мест и количество мест в гостинице
Написать программу работы с массивом из 10 объектов Объекты - номера в отеле. Требуется...

БД Турфирма: сравнение доступних мест с количееством заказаних мест
К посту я додал частинку моей схеми БД Помогите мне решить проблему: в табл Тури вносится...

__________________
Помогаю в написании курсовых работ и дипломов здесь.
6
Регистрация: 23.10.2013
Сообщений: 5,076
Записей в блоге: 8
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
0
196 / 8 / 3
Регистрация: 30.04.2016
Сообщений: 733
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 ) между строками. Строка «Автобус» не печатается. А её надо напечатать.
Вот такие три проблемы!
0
Регистрация: 23.10.2013
Сообщений: 5,076
Записей в блоге: 8
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
0
196 / 8 / 3
Регистрация: 30.04.2016
Сообщений: 733
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-й
      
 
 
     ряд  ряд  ряд  ряд  ряд  ряд  ряд  ряд
То же не понятно.
0
Регистрация: 23.10.2013
Сообщений: 5,076
Записей в блоге: 8
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
0
Платежеспособный зверь
8736 / 4156 / 1604
Регистрация: 28.10.2009
Сообщений: 11,247
11.01.2017, 21:11 7
Цитата Сообщение от Petro29 Посмотреть сообщение
В автобусе 6 рядов кресел по 4 места в каждом ряду
Цитата Сообщение от Petro29 Посмотреть сообщение
Почему количество мест в автобусе 45, а не 32?
Потому что 6 умножить на 4=24
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
11.01.2017, 21:11

Заказываю контрольные, курсовые, дипломные работы и диссертации здесь или здесь.

Подсчитать количество занятых мест
Как подсчитать количество занятых мест? Имеется dbEdit1 в котором указана вместимость. dbEdit2...

В зрительном зале X рядов, а мест в каждом ряду на 6 больше. Сколько в зрительном зале посадочных мест?
Составьте выражение по условию задачи: "В зрительном зале х рядов, а мест в каждом ряду на 6...

Структура: вывести на экран информацию о результатах прыжков в длину, отсортированную в порядке возрастания мест
В одном файле хранятся сведения об участниках соревнований: номер участника, ФИО, страна, во 2...

Массив: Вывести фамилии спортсменов и их результаты в сумме в порядке занятых мест
В соревнованиях по десятиборью участвуют N спортсменов. Известны результаты в баллах по каждому из...

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

Подсчитать сумму мест, на которых в словах текста стоит заданная буква
Тема файловый ввод и вывод , прога нужна для Borland c++. Написать программу для подсчета суммы...


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.