Главная страница

Лаба по информатике. Лабораторная работа 7. Ниу мэи


Скачать 493.64 Kb.
НазваниеНиу мэи
АнкорЛаба по информатике
Дата21.02.2022
Размер493.64 Kb.
Формат файлаdocx
Имя файлаЛабораторная работа 7.docx
ТипДокументы
#369388

НИУ «МЭИ»


Лабораторная работа 7.
Нисходящее проектирование: программы с использованием подпрограмм и модулей.
Вариант 14.

Выполнила: Ратникова М.А. Группа: Э-01-21

Проверил: Воробьёва И.А.

14 вариант:


Дана целочисленная матрица А(n,m). Проверить, равны ли элементы

последнего столбца соответствующим элементам предпоследнего столбца. Если да, то найти в этом столбце номер первого элемента, значение которого принадлежит отрезку [x,y]. В противном случае поменять местами

последнюю и предпоследнюю строки матрицы.

УПЗ:


Считать размерность двумерного массива А(n,m) и его элементы из файла. Проверить, равны ли элементы последнего столбца (A[i][m-1]) соответствующим элементам предпоследнего столбца(A[i][m-2]). Если да (flg=True), то найти в этом столбце номер(idx) первого элемента, значение которого принадлежит отрезку [x,y], координаты которого также

считываются из файла. В противном случае поменять местами последнюю и предпоследнюю строки матрицы.

Таблица данных:




Класс

Имя, смысл

Тип

Структура

Диапазон

Формат

Входные

x, левая граница отрезка

целый

простая

переменная



-10 < x < y




y, правая граница отрезка

целый

простая

переменная



x < y < 10




A, исходная матрица


веществ енный

двумерный массив

-10 <= А <= 10




n, количество строк в массиве A

целый

простая

переменная



1 < n <= 10



m, количество столбцов в массиве A

целый

простая

переменная



1 < m <= 10



Промежу точные

i, счётчик строк в массиве A

целый

простая

переменная



0 <= i < 9




j, счётчик столбцов в массиве A

целый

простая

переменная


0 <= j < 9






flg

логическ ий

простая

переменная



True/False



Выход- ные

idx, номер первого элемента,

принадлежащему отрезку [x,y]

целый

простая

переменная


0 <= idx< 10






А, измененная матрица

веществ енный

Двумерный массив


-10<=A<=10





Блок-схемы:

Головной модуль




Проверка на равенство столбцов


Нахождение номера первого элемента, принадлежащего отрезку [x,y]





Замена последней и предпоследней строк матрицы

j

i

0

1

2

3

4

0

10

2

2

3

5

1

7

10

9

8

4

2

3

4

1

8

4

3

1

3

9

5

9



































































































Функциональные тесты:

Тест

Исходные данные

Ожидаемый

результат

Смысл теста

1

n = 4

m = 5 x=7 y=10

A:

Вывод:

Все элементы последнего и

предпоследнего столбцов равны idx=2

Тест на случайных значениях




j

0

1

2

3

4




i

0

10

3

6

5

5

1

3

4

7

6

6

2

1

5

3

9

9

3

10

9

1

8

8

2

n = 4

m = 5 x=7 y=10

A:

Вывод: A:

Тест для изменения матрицы




j

0

1

2

3

4




i

0

10

2

2

3

5

1

7

10

9

8

4

2

1

3

9

5

9

3

3

4

1

8

4

3

n = 2

m = 2 x=7 y=10

A:

Вывод:

Все элементы последнего и

предпоследнего столбцов равны idx=0

Тест при маленькой размерности

двумерного массива, а также нахождение

элемента,

принадлежащего отрезку [x,y]




j

0

1




i

0

10

10

1

3

3

4

n = 2

m = 2 x=7 y=10

A:

Вывод: A:

Тест при маленькой размерности массива для изменения матрицы




j

0

1




i

0

6

8

1

2

1

5

n = 4

m = 5 x=7 x=10

A:

Вывод:

Все элементы последнего и

предпоследнего столбцов равны

Элемент из [x,y] не был найден

Тест при выполнении условия задачи, но не нахождения элемента, принадлежащего

отрезку [x,y]




j

0

1

2

3

4




i

0

10

2

6

2

2

1

3

4

3

3

3

2

1

9

8

1

1

3

10

17

1

6

6



j

i

0

1

0

6

8

1

2

1







































Код программы:
#Головной модуль

import checkRavno, search_idx, zamena, readA, readXY, write NMAX=MMAX=10

n=0 m=0 x=0 y=0 idx=0

nameF='test1.txt' nameF2='otrezok.txt'

A= [0.0]*NMAX

for i in range(NMAX):

A[i]=[0.0]*MMAX

print('Массив A:\n') A =readA(A, nameF) write(A,n,m)

x,y =readXY(nameF2) flg1=checkRavno(A,n,m) if flg1:

print('Все элементы последнего и предпоследнего столбцов равны')

flg2,idx =search_idx(A,n,m,x,y) if flg2:

print('Номер первого элемента из [x,y]: ', idx) else:

print('Элемент не был найден.') else:

print('Элементы последнего и предпоследнего столбцов не равны. Меняем последнюю и предпоследнюю строки матрицы местами:')

zamena(A,n,m)
#Ввод и вывод

def readA(A, nameF): fd=open(nameF, 'r') s=fd.readline() s_in=s.split(',') n=int(s_in[0]) m=int(s_in[1])

for i in range(n): s=fd.readline() s_in=s.split(',') for j in range(m):

A[i][j]=float(s_in[j]) fd.close()

return A
def readXY(nameF2): fd=open(nameF2, 'r') s=fd.readline() s_in=s.split(',') x=int(s_in[0]) y=int(s_in[1]) return x,y


def write(A, n, m): for i in range(n):


for j in range(m): print((A[i][j]), end = '')

print('\n')



#Сама задача

#Проверка равенства элементов последнего и предпоследнего столбцов def checkRavno(A,n,m):

i=0 flg1=True

while (i if(A[i][m-2] != A[i][m-1]):

flg1 = False else:

i=i+1 return flg1
#Нахождение номера первого элемента, принадлежащего отрезку [x,y] def search_idx(A,n,m,x,y):

i=0 idx=0

flg2=True

while (i flg2:

if ((A[i][m-1] >= x) and (A[i][m-1] <= y)): flg2=False

idx=i else:

i=i+1 return flg2, idx
#Замена последней и предпоследней строк матрицы def zamena(A,n,m):

j=0 last = 0

for j in range (m): last = A[n-2][j]

A[n-2][j] = A[n-1][j]

A[n-1][j] = last

print('A=', A) return A


написать администратору сайта