Skip to content

Instantly share code, notes, and snippets.

@w495
Last active December 31, 2015 04:29
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save w495/7934484 to your computer and use it in GitHub Desktop.
Save w495/7934484 to your computer and use it in GitHub Desktop.
Скрипт для тестирования задач на матрицы (14, 15 ЛР). Выводи матрицу указанного размера.
#!/usr/bin/env python
# -*- coding: utf8 -*-
'''
Скрипт для тестирования задач на матрицы (14, 15 ЛР).
Выводи матрицу указанного размера.
Пример использования:
$ python ./test-generator.py 3
3
11 12 13
21 22 23
31 32 33
$ python ./test-generator.py 10
10
0101 0102 0103 0104 0105 0106 0107 0108 0109 0110
0201 0202 0203 0204 0205 0206 0207 0208 0209 0210
0301 0302 0303 0304 0305 0306 0307 0308 0309 0310
0401 0402 0403 0404 0405 0406 0407 0408 0409 0410
0501 0502 0503 0504 0505 0506 0507 0508 0509 0510
0601 0602 0603 0604 0605 0606 0607 0608 0609 0610
0701 0702 0703 0704 0705 0706 0707 0708 0709 0710
0801 0802 0803 0804 0805 0806 0807 0808 0809 0810
0901 0902 0903 0904 0905 0906 0907 0908 0909 0910
1001 1002 1003 1004 1005 1006 1007 1008 1009 1010
$ python ./test-generator.py 100500 > ./test-100500.txt
$ gcc ./fw14.c -Wall -pedantic -std=c89 -o ./fw14
$ ./fw14 < ./test-100500.txt$
$ ...
$ python ./test-generator.py 42 | ./fw14
$ ...
Если размер не указан, то используется матрица 100 x 100.
'''
# Импортируем модуль sys для работы
# с аргументами командной строки (`sys.argv`).
import sys
# Импортируем модуль math для функции math.log/2.
import math
# Зададим константами размеры по умолчанию.
DEFAULT_START = 1
DEFAULT_SIZE = 100
def generate(start, size):
'''
Выводит на экран матрицу указанного размера в формате:
<n>
<x><x> <x><x+1> <x><x+2> ... <x><x+n>
<x+1><x> <x+1><x+1> ...
<x+2><x> ...
...
<x+n><x> ... <x+n><x+n>
@param int start
показывает с какого числа начинать отсчтет
(x на на иллюстрации);
@param int size
показывает размер матрицы
(n на иллюстрации).
'''
# Вычисляет сколько нужно поставить ведущих нулей.
offset = str(int(math.log(size, 10)) + 1)
# Выводит размер матрицы.
sys.stdout.write("%d\n"%size)
# Формируем строку для форматного вывода (как в сишном `printf`).
# Строка будет иметь вид "%.<offset>d%.<offset>d% ", например
# "%.4d%.4d% ", если `size = 1024`. Таким образом,
# если `size = 1024`, подставив в строку числа 4 и 2,
# мы получим "00040002".
formatstring = "%."+ offset +"d%." + offset +"d "
# Цикл от start до size+1
for i in range(start, size+1):
# Цикл от start до size+1
for j in range(start, size+1):
# Подставляет числа i и j в строку.
outstring = formatstring%(i, j)
# Выводит полученную строку в стандартный файл вывода.
sys.stdout.write(outstring)
# Выводит '\n' в стандартный файл вывода,
# чтобы обозначить, конец строки матрицы.
sys.stdout.write('\n')
if __name__ == '__main__':
'''
Выполняется в пространстве имен __main__.
Выполнится только при запуске этого файла.
'''
start = DEFAULT_START
size = DEFAULT_SIZE
# Если число аргументов командной строки больше 1,
# то в качестве размера матрицы задаем переданный аргумент.
if len(sys.argv) > 1 :
# Изначально в sys.argv[1] лежит строка,
# и нам требуется его привеcти к целому.
size = int(sys.argv[1])
# Вызываем generate.
generate(start, size)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment