Добро пожаловать! Войти Зарегистрироваться

Расширенный

Тестирование задач на матрицы (14 и 15 ЛР)

Написал w-495 
Тестирование задач на матрицы (14 и 15 ЛР)
13 December 2013 00:12
Скрипт для тестирования задач на матрицы (14, 15 ЛР):

[gist.github.com]

#!/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)
К сожалению, только зарегистрированные пользователи могут писать в этом форуме.

Авторизоваться на форуме