Форум программистов, компьютерный форум, киберфорум
QBasic
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.75/4: Рейтинг темы: голосов - 4, средняя оценка - 4.75
1252 / 702 / 359
Регистрация: 20.02.2010
Сообщений: 1,035
1

Получить матрицу n*n, заполненную по диагоналям

05.12.2010, 10:22. Просмотров 819. Ответов 1
Метки нет (Все метки)

вводится n, надо получить матрицу n*n, заполненную по диагоналям, например:
1 2 6
3 5 7
4 8 9
вот что получилось
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
25
26
27
28
29
CLS
INPUT "vvedite n"; n
DIM a(n, n)
DO
    i = i + 1
    IF (i AND 1) = 0 THEN c = 1: ELSE c = -1
    SELECT CASE i
        CASE IS <= n
            d = 0
            IF (i AND 1) = 0 THEN b = b + 1 ELSE a = a + 1: b = 1
        CASE IS > n
            IF (i AND 1) = 0 THEN a = a + 1 ELSE b = b + 1
    END SELECT
    FOR y = a TO b STEP c
        IF (i AND 1) = 0 THEN d = b - y + a ELSE d = d + 1
        FOR x = d TO d
            r = r + 1
            a(y, x) = r
        NEXT
    NEXT
    SWAP a, b
LOOP UNTIL i = 2 * n
FOR y = 1 TO n
    FOR x = 1 TO n
        LOCATE y + 1, x * 4
        PRINT a(y, x);
    NEXT
    PRINT
NEXT
надо ли тут что переделывать?
как по другому можно сделать выравнивание печати?
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
05.12.2010, 10:22
Ответы с готовыми решениями:

Получить матрицу с единицами по диагоналям
помогите написать программу в с++ , получить матрицу, не знаю как сделать

Массив: Получить матрицу, заполненную 0 и 1 по главной и побочной диагонали
Получить матрицу: 1 0 0…0 0 1 0 1 0…0 1 0 0 0 1…1 0 0 …………… 0 0 1…1 0 0 0 1 0…0 1 0 1 0 0…0...

Получить матрицу размера n*m, заполненную случайными действительными числами от 0 до 25
Получить матрицу размера n*m, заполненную случайными действительными числами от 0 до 25. Указать...

Построить заполненную матрицу
Построить заполненную матрицу по следующему закону: элементы отмеченные цифрами 1,2,3,4, заменить...

1
4726 / 1398 / 386
Регистрация: 25.04.2010
Сообщений: 3,771
Записей в блоге: 1
05.12.2010, 21:58 2
надо ли тут что переделывать?
Если всё работает зачем утруждаться, можно потратить несколько часов и вогнать эту логику в один цикл, но зачем?

как по другому можно сделать выравнивание печати?
Через USING - ограниченное применение, можно в графическом режиме создать собственный оператор печати текста с точностью до пикселя и там уже делать процедуру печати матрицы с выравниванием(можно слизать шрифт со знакогенератора кому лень свой шрифт делать). А можно делать все в VB на FlexGrid'е - самый удобный вариант, особенно для "тяжёлых" заданий по линейке.

Добавлено через 2 часа 7 минут
PureBasic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
DECLARE SUB TakeFont ()
DECLARE SUB PrintCharXY (x%, y%, ASCII%, cv%)
DIM SHARED Smb%(255, 15), TwoPOW%(7)
 
  SCREEN 13
 
  TakeFont
  FOR i% = 25 TO 0 STEP -1
   PrintCharXY 20 + i% * 4, 20 + i% * 4, 65 + i%, 31 + (i% AND 15) + 1
  NEXT
 
SUB PrintCharXY (x%, y%, ASCII%, cv%)
     FOR GY% = 0 TO 15
        FOR GX% = 0 TO 7
          IF (Smb%(ASCII%, GY%) AND TwoPOW%(GX%)) = TwoPOW%(GX%) THEN PSET (GX% + x%, GY% + y%), cv%
        NEXT
     NEXT
END SUB
 
SUB TakeFont
  '  Таблица степеней двойки для скорости
  FOR i% = 0 TO 7: TwoPOW%(i%) = 2 ^ i%: NEXT
  '  Копируем побитно системный шрифт
  FOR i% = 0 TO 255
     LINE (0, 0)-(7, 15), 0, BF
     LOCATE 1, 1: PRINT CHR$(i%)
     FOR GY% = 0 TO 15
        ST% = 0
        FOR GX% = 0 TO 7
          IF POINT(GX%, GY%) = 15 THEN ST% = ST% + TwoPOW%(GX%)
        NEXT
        Smb%(i%, GY%) = ST%
     NEXT
  NEXT
END SUB
Вот кстати содрал системный шрифт, пользуйся, напиши свои процедуры PrintText, PrintMatrix. Параметры системного шрифта: 8 пикселей по горизонтали и 16 по вертикали.

Добавлено через 8 часов 18 минут
Печать матриц и текста:
PureBasic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
DECLARE SUB TakeFont ()
DECLARE SUB PrintCharXY (x%, y%, ASCII%, cv%)
DECLARE SUB PrintTextXY (x%, y%, Text$, cv%)
DECLARE SUB PrintMatrixXY (x%, y%, Matr() AS INTEGER, HorizR%, VertR%, HSpacing!, VSpacing!, cv%)
 
DIM SHARED Smb%(255, 15), TwoPOW%(7)
DIM M(10, 10) AS INTEGER, f%(10)
 
  SCREEN 13
  TakeFont
    LINE (0, 0)-(319, 199), 199, BF
  FOR i% = 25 TO 0 STEP -1
   PrintCharXY 0 + i% * 4, 20 + i% * 4, 65 + i%, 31 + (i% AND 15) + 1
  NEXT
 
  FOR iy% = 1 TO 10: FOR ix% = 1 TO 10: M(ix%, iy%) = RND * 10: NEXT: NEXT
  PrintTextXY 10, 10, "Proverka pechati matric!", 15
 
  PrintMatrixXY 90, 30, M(), 10, 10, 20, 10, 151
 
SUB PrintCharXY (x%, y%, ASCII%, cv%)
     FOR GY% = 0 TO 15
        FOR GX% = 0 TO 7
          IF (Smb%(ASCII%, GY%) AND TwoPOW%(GX%)) = TwoPOW%(GX%) THEN PSET (GX% + x%, GY% + y%), cv%
        NEXT
     NEXT
END SUB
 
SUB PrintMatrixXY (x%, y%, Matr() AS INTEGER, HorizR%, VertR%, HSpacing!, VSpacing!, cv%)
 DIM Zn$
  FOR iy% = 1 TO VertR%
     FOR ix% = 1 TO HorizR%
      Zn$ = STR$(Matr(ix%, iy%))
      PrintTextXY x% + ix% * HSpacing!, y% + iy% * VSpacing!, Zn$, cv%
     NEXT
  NEXT
END SUB
 
SUB PrintTextXY (x%, y%, Text$, cv%)
xn% = x%
IF Text$ = "" THEN EXIT SUB
  FOR xp% = 1 TO LEN(Text$)
    CH% = ASC(MID$(Text$, xp%, 1))
    PrintCharXY xn%, y%, CH%, cv%
    xn% = xn% + 8
  NEXT
END SUB
 
SUB TakeFont
  '  Таблица степеней двойки для скорости
  FOR i% = 0 TO 7: TwoPOW%(i%) = 2 ^ i%: NEXT
  '  Копируем побитно системный шрифт
  FOR i% = 0 TO 255
     LINE (0, 0)-(7, 15), 0, BF
     LOCATE 1, 1: PRINT CHR$(i%)
     FOR GY% = 0 TO 15
        ST% = 0
        FOR GX% = 0 TO 7
          IF POINT(GX%, GY%) = 15 THEN ST% = ST% + TwoPOW%(GX%)
        NEXT
        Smb%(i%, GY%) = ST%
     NEXT
  NEXT
END SUB
1
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
05.12.2010, 21:58

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

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

Вывести матрицу, заполненную рандомными числами
Нужно вывести двумерный массив, заполненный рандомными числами, а выводит массив, заполненный одним...

Сформировать матрицу n*m, заполненную случайными числами
Сформировать на экране матрицу n*m, заполненную случайными числами(используя функцию rnd).

Вывести на консоль квадратную матрицу, заполненную справа налево
нужно вывести вот такой двумерный массив: 6 5 4 3 2 1 12 11 10 9 8 7 18 17 16 15 14 13 24 23 22...


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

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

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