Форум программистов, компьютерный форум, киберфорум
Turbo Pascal
Войти
Регистрация
Восстановить пароль
 
0 / 0 / 0
Регистрация: 20.11.2011
Сообщений: 20
1

Комментирование лабораторной

04.03.2013, 23:16. Просмотров 467. Ответов 1
Метки нет (Все метки)


Знакомая попросила меня разобраться с лаюораторной работой на языке pascal.
Дорогие участники cyberforum помогите закомментировать данный листинг, сам я изучаю программирование, но не язык pascal, посему не понимаю что выполняет данный программный код.
От себя могу добавить, что в итоге выполняется вот что:
Номер строки, в которой находится самая длинная серия одинаковых элементов(процедура)
______
С первым циклом я разобрался
______
Pascal
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
program lw8;
uses crt;
type mat=array [1..100, 1..100] of integer;
const n=6; m=9;
var a:mat;
function k_stolb(var a:mat):integer;
var i,j,k: integer;
begin
k:=0;
randomize;
for i:=1 to n do
  for j:=1 to m do
    a[i,j]:=random(20);
for i:=1 to n do begin
  for j:=1 to m do
  write(a[i,j]:3);
  writeln;
  end;
for i:=1 to m do 
  for j:=1 to n do
    if a[j,i]=0 then begin
      inc(k);
      break;
      end;
      k_stolb:=k;
end;
procedure nom_str(a:mat);
var i,j,q,w,r,t: integer;
begin
w:=1;
r:=0;
for i:=1 to n do
begin 
q:=1; t:=1;
  for j:=1 to m-1 do begin
    if a[i,j]=a[i,j+1] then begin
    inc(t);
    if t>q then q:=t
    end
    else
    t:=1;
    if q>w then
    begin
    r:=i;
    w:=q;
    end;
   end;
   end; 
if w=1 then writeln('В матрице нет строк с одинаковыми элементами')
else begin
writeln('Самая длинная серия одинаковых элементов находится в ',r,' строке');
end;
end;
begin
writeln('В ',k_stolb(a),' столбцах присутствует нулевой элемент');
nom_str(a);
end.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
04.03.2013, 23:16
Ответы с готовыми решениями:

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

Найти ошибки в лабораторной
Помогите, пожалуйста, найти ошибки в лабе! Я самостоятельно не могу найти, две недели с этой...

Тест по лабораторной работе
Балів: 1 Використовуючи масиви А і B визначте значення наступного виразу A(1,3)+B(2,2)*A(2,4). У...

Посодействуйте пожалуйста при решении задачи на защиту лабораторной работы
Суть проблемы в том что с паскалем я не особо дружу. Хожу делаю, но практически каждый раз не...

__________________
Помогаю в написании студенческих работ здесь.
1
20 / 20 / 11
Регистрация: 26.11.2012
Сообщений: 164
Записей в блоге: 2
07.03.2013, 11:46 2
Pascal
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
program lw8; {название программы "laboratorocal work number 8"}
uses crt;  {включает модуль crt}
type mat=array [1..100, 1..100] of integer; {почему-то типизирован массив 100 на 100}
const n=6; m=9; {определение констант}
var a:mat; {описание переменной а с типом матрицы mat размером почему-то 100 на 100}
function k_stolb(var a:mat):integer; {это функция определения k-ого столбца, кстать var a значит что a - это матрица, которая заходит в функцию из внешней программы со всеми своими элементами, и может туда обратно выйти из подпрограммы}
var i,j,k: integer; {описание переменных подпрограммы function}
begin {начало подпрограммы}
k:=0; {k присвоили 0 чтобы считать от ноля}
randomize; {что-то чтобы выполнялась функция случайного заполнения матрицы}
for i:=1 to n do 
  for j:=1 to m do {рисуется двумерный массив размером 6 строк на 9 столбцов или наоборот...неважно}
    a[i,j]:=random(20); {случайные числа от 0 до 20}
for i:=1 to n do begin {цикл от 1 до 6 ведь n - это константа 6! далее операторные скобки begin..end чтобы включить выполнение нескольких операторов сразу скорее всего для форматированного вывода элементов массива}
  for j:=1 to m do 
  write(a[i,j]:3); {это означает что числа начиная от 1-й цифры будут на расстоянии от другого числа на 2 пробела, если число двузначное, то числа будут отображены с одним пробелом между собой!}
  writeln;{это как нажатие Enterа, т.е. на 1 строку вниз}
  end;
for i:=1 to m do {хмм на этот раз матрица размеров 9 на 6! why??..}
  for j:=1 to n do
    if a[j,i]=0 then begin {это условие ставится "если какая-нить ячейка матрицы равна 0, то выполнять операторы заключенные в операторную скобку begin..end}
      inc(k); {не зря k присваивалось 0, т.к. программа намерена определить сколько нулевых элементов в матрице}
      break; {хмм это шоковый для меня выход из операторной скобки begin..end мм но зато я знаю что после брейка значение k остается и поэтому нижеследующая k столбец приравнивается k приравняется к k}
      end;
      k_stolb:=k;
end; {это конец функции k-столбец...ааа break видимо был для того чтобы определить номер столбца с первым 0-ым элементов..или нет}
procedure nom_str(a:mat); {это процедура для определения номера строки, тут a:mat стоит без var-a - это значит что матрица заходит в подпрограмму со своими значениями и не выходит, т.к. надобности в том нет..}
var i,j,q,w,r,t: integer; {описываются переменные данной подпрограмы}
begin
w:=1; 
r:=0;
for i:=1 to n do {цикл от 1 до 6}
begin 
q:=1; t:=1;
  for j:=1 to m-1 do begin {цикл внутри цикла от 1 до 8, я не до 9, т.к. введено j+1, которое будет дополнять 8 до 9}
    if a[i,j]=a[i,j+1] then begin {условие если, допустим, i-строка, а j - столбец, то "если пара элементов массива под одним индексом i стоящих, равны между собой, н-р, как:
1 2 19 10
1 3 14 13
3 6 11 18
где у первого столбца проверяются пары чисел на равенство, в данном случае 1 1 3 столбец, в нём 1 и 1 равны а 1 и 3 не равны}
    inc(t); {если пара равна, то t увеличивается на 1, а увеличивается оно начиная с единице как описано выше}
    if t>q then q:=t {если накопитель t будет больше q (отсчёт которой тоже от единицы), то конец хы}
    end
    else {иначе же t снова присваивает единицу мда}
    t:=1;
    if q>w then {еще условие: если q больше w то r присвоит значение i-й строки и вместе с тем w присвоит значение q мда}
    begin
    r:=i; 
    w:=q;
    end;
   end;
   end; {процедура на это заканчивается}
if w=1 then writeln('В матрице нет строк с одинаковыми элементами') {если w=1, то выводит то что слева}
else begin
writeln('Самая длинная серия одинаковых элементов находится в ',r,' строке'); {иначе выводит то, что тут слева}
end; {далее короче выводит номер столбца k в которой присутствует 0 и строку к тому же}
end;
begin
writeln('В ',k_stolb(a),' столбцах присутствует нулевой элемент');
nom_str(a);
end.
[удалено]
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
07.03.2013, 11:46

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

Комментирование кода
uses crt; label P1,P2,P3; var s,st,slovo:string; i:integer; q,t:char; f,p:...

Задание по лабораторной
Помогите, пожалуйста. Нужно на паскале из матрицы А (n x m) (матрица вводится пользователем с...

Вопрос по лабораторной работе
program lab2; var x: array of real; k, n, i: integer; xx, eps, t: real; L: array of real;...

Несколько заданий из лабораторной работы
это мою защитная работа где именно ошибки ЛАБОРАТОРНАЯ РАБОТА № 4. ОДНОМЕРНЫЕ МАССИВЫ...


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

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

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