18 / 18 / 6
Регистрация: 14.11.2010
Сообщений: 87
1

Переделать под процедуру часть кода

21.01.2011, 01:47. Показов 487. Ответов 5
Метки нет (Все метки)

всем доброго времени дня
если есть пара лишних минут, то объясните пожалуйста...
вот текст..что-то вроде базы данных..
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
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
program tabliza;
uses crt;
type tabl=record
          fam:string; {фамилия, инициалы сотрудника}
          gor:string; {город проживания}
          ul:string;  {улица}
          dom:byte;   {дом}
          kv:byte;    {квартира}
end; {record}
var
  a:array[1..3, 1..5] of tabl;
  m:array[1..5] of byte; {максимальное количество символов в элементе}
  i:integer;
  j:integer;
  k:byte; {колличество символов"-"}
  x:byte; {количество цифр в числе "ch"}
  ch:integer; {число}
  n:integer;{промежуточное значение "ch"}
begin
  {ввод данных}
  for i:=1 to 3 do
    for j:=1 to 5 do begin
      if j=1 then begin
        writeln('введите фамилию сотрудника');
        readln(a[i,j].fam);
      end; {if}
      if j=2 then begin
        writeln('введите город');
        readln(a[i,j].gor);
      end; {if}
      if j=3 then begin
        writeln('введите улицу');
        readln(a[i,j].ul);
      end; {if}
      if j=4 then begin
        writeln('введите дом');
        readln(a[i,j].dom);
      end; {if}
      if j=5 then begin
        writeln('введите квартиру');
        readln(a[i,j].kv);
      end; {if}
    end; {for}
    {определение максимальной длинны}
    {строки}
    for i:=1 to 3 do
      for j:=1 to 5 do begin
        case j of
          1:if length(a[i,j].fam)>m[1] then m[1]:=length(a[i,j].fam);
          2:if length(a[i,j].gor)>m[2] then m[2]:=length(a[i,j].gor);
          3:if length(a[i,j].ul)>m[3] then m[3]:=length(a[i,j].ul);
          {числа}
          4:begin
              ch:=a[i,j].dom;
              x:=1;
              while ch>9 do begin
                n:=ch div 10;
                inc(x);
                ch:=n;
              end;
              if x>m[4] then m[4]:=x;
              if m[4]<3 then m[4]:=3;
            end;
          5:begin
              ch:=a[i,j].kv;
              x:=1;
              while ch>9 do begin
                n:=ch div 10;
                inc(x);
                ch:=n;
              end;
              if x>m[5] then m[5]:=x;
              if m[5]<3 then m[5]:=3;
            end;
        end; {case}
      end; {for}
  {вывод результатов на монитор}
  k:=0;
  for i:=1 to 5 do
    inc(k,m[i]);
  writeln;
  for i:=1 to k+11 do
    write('-');
  writeln;
  writeln('| ','ФИО':m[1],'| ','город':m[2],'| ','улица':m[3],'| ','дом':m[4],'| ','кв.':m[5],'|');
  for i:=1 to k+11 do
    write('-');
  writeln;
  for i:=1 to k+11 do
    write('-');
  writeln;
  for i:=1 to 3 do begin
    write('| ');
    for j:=1 to 5 do begin
      case j of
        1:write(a[i,j].fam:m[1],'| ');
        2:write(a[i,j].gor:m[2],'| ');
        3:write(a[i,j].ul:m[3],'| ');
        4:write(a[i,j].dom:m[4],'| ');
        5:write(a[i,j].kv:m[5],'|');
      end; {case}
    end; {for}
    writeln;
  end; {for}
  for i:=1 to k+11 do
    write('-');
  readln;
end.
как правильно переделать эту часть
Pascal
1
2
3
4
5
6
7
8
begin
              ch:=a[i,j].kv;
              x:=1;
              while ch>9 do begin
                n:=ch div 10;
                inc(x);
                ch:=n;
              end;
в процедуру или функцию и вставить обратно..
а то я пока не въехал в эти премудрости..
__________________
Помощь в написании контрольных, курсовых и дипломных работ, диссертаций здесь
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
21.01.2011, 01:47
Ответы с готовыми решениями:

Переделать процедуру под функцию
Здравствуйте. Помогите пожалуйста переделать программу под функцию...

переделать часть кода в делфи
как переделать часть кода в делфи чтобы выводилось не в консоле а на форму writeln('Введите N...

Переделать под процедуру
Всем привет. Нужна помощь с переделкой задачи под процедуру... Вот сам код: uses crt; var ...

Переделать код под процедуру
по этой программе выполнить процедуру массивов var a: array of real; i,j:integer; s,c:real;...

5
52 / 51 / 19
Регистрация: 22.03.2009
Сообщений: 173
21.01.2011, 16:44 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
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
program tabliza;
uses crt;
type tabl=record
          fam:string; {фамилия, инициалы сотрудника}
          gor:string; {город проживания}
          ul:string;  {улица}
          dom:byte;   {дом}
          kv:byte;    {квартира}
end; {record}
var
  a:array[1..3, 1..5] of tabl;
  m:array[1..5] of byte; {максимальное количество символов в элементе}
  i:integer;
  j:integer;
  k:byte; {колличество символов"-"}
  x:byte; {количество цифр в числе "ch"}
  ch:integer; {число}
  n:integer;{промежуточное значение "ch"}
 
procedure kvartira(i:integer;j:integer);   { создаем процедуры с блоками кода }
begin
ch:=a[i,j].kv;
    x:=1;
    while ch>9 do begin
      n:=ch div 10;
      inc(x);
      ch:=n;
    end;
    if x>m[5] then m[5]:=x;
    if m[5]<3 then m[5]:=3;
end;
 
procedure dom(i:integer;j:integer);
begin
    ch:=a[i,j].dom;
    x:=1;
    while ch>9 do begin
      n:=ch div 10;
      inc(x);
      ch:=n;
    end;
    if x>m[4] then m[4]:=x;
    if m[4]<3 then m[4]:=3;
end;
 
begin
 
 
  {ввод данных}
  for i:=1 to 3 do
    for j:=1 to 5 do begin
      if j=1 then begin
        writeln('input family');
        readln(a[i,j].fam);
      end; {if}
      if j=2 then begin
        writeln('gorod');
        readln(a[i,j].gor);
      end; {if}
      if j=3 then begin
        writeln('street');
        readln(a[i,j].ul);
      end; {if}
      if j=4 then begin
        writeln('house');
        readln(a[i,j].dom);
      end; {if}
      if j=5 then begin
        writeln('kvatrira');
        readln(a[i,j].kv);
      end; {if}
    end; {for}
    {определение максимальной длинны}
    {строки}
    for i:=1 to 3 do
      for j:=1 to 5 do begin
        case j of
          1:if length(a[i,j].fam)>m[1] then m[1]:=length(a[i,j].fam);
          2:if length(a[i,j].gor)>m[2] then m[2]:=length(a[i,j].gor);
          3:if length(a[i,j].ul)>m[3] then m[3]:=length(a[i,j].ul);
          {числа}
          4:dom(i,j);  { вставляем процедуры}
          5:kvartira(i,j);
            
        end; {case}
      end; {for}
  {вывод результатов на монитор}
  k:=0;
  for i:=1 to 5 do
    inc(k,m[i]);
  writeln;
  for i:=1 to k+11 do
    write('-');
  writeln;
  writeln('| ','Fam':m[1],'| ','City':m[2],'| ','Street':m[3],'| ','Dom':m[4],'| ','kv.':m[5],'|');
  for i:=1 to k+11 do
    write('-');
  writeln;
  for i:=1 to k+11 do
    write('-');
  writeln;
  for i:=1 to 3 do begin
    write('| ');
    for j:=1 to 5 do begin
      case j of
        1:write(a[i,j].fam:m[1],'| ');
        2:write(a[i,j].gor:m[2],'| ');
        3:write(a[i,j].ul:m[3],'| ');
        4:write(a[i,j].dom:m[4],'| ');
        5:write(a[i,j].kv:m[5],'|');
      end; {case}
    end; {for}
    writeln;
  end; {for}
  for i:=1 to k+11 do
    write('-');
  readln;
end.
1
18 / 18 / 6
Регистрация: 14.11.2010
Сообщений: 87
21.01.2011, 22:00  [ТС] 3
спасибо..но вопрос, что конкретно нужно указывать в свкобках после названия? ведь переменных там много, а указаны только i и j..
Цитата Сообщение от mus Посмотреть сообщение
procedure kvartira(i:integer;j:integer);
0
52 / 51 / 19
Регистрация: 22.03.2009
Сообщений: 173
21.01.2011, 22:11 4
В процедурах как и в функциях в скобках указываются входные параметры, тоесть некие переменные от которых зависит расчеты и тп.
в данном случае я лиш показал как делаются процедуры. просто у Вас используются многие переменные которые, так же используются и в другой части программы. поэтому я задал только i и j хотя надо было бы сделать процедуру полностью автономной от остальной программы
у процедуры/ф-ции так же можно задавать свои (локальные) переменные через var
к примеру:
Pascal
1
2
3
4
5
6
7
procedure x2(x:integer);
var y:integer;
begin
  writeln('vvedite x');
  y:=x*x;
  writeln('y= ',y);
end;
1
7 / 6 / 3
Регистрация: 07.01.2011
Сообщений: 22
21.01.2011, 22:22 5
Цитата Сообщение от bezprizornik Посмотреть сообщение
спасибо..но вопрос, что конкретно нужно указывать в свкобках после названия? ведь переменных там много, а указаны только i и j..
ну смотри

есть у тебя процедура,допустим

procedura kvartira

в этой процедуре,то что ты укажешь в разделе var те
Pascal
1
2
3
procedura kvartira;
var
i,j : Integer;
i,j будут выполнятся только в этой процедуре, и дальше в программе их значения уже использовать нельзя. Чтобы не использоватть глобальные параметры(в начале программы параметры в разделе var)
можно делать нужные тебе параметры в самой процедуру те
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
prozedura kvartira(var a,b : Integer);
begin
a:=5;
b:=4;
end;
 
var
  a,b: Integer;
begin
  kvartira(a,b);
  write(a,b);
end.
т.е. ты вызвал процедуру,она сделала что то с нужными тебе параметрами,а потом вернули их в скобках.

Чтобы передать процедуре какие то данные используют
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
prozedura kvartira(a,b : Integer;var sum : Integer);
begin
sum:=a+b;
 
end;
 
var
  sum: Integer;
begin
  kvartira(4,5,sum);
  write(sum);
end.
то есть в процедуре описал типы пораметров какие будут переданы процедуре для работы
, а в месте где нужно что-то сделать вызываешь эту процедуру,передаешь ей значения и процедура за тебя все сделает.
1
18 / 18 / 6
Регистрация: 14.11.2010
Сообщений: 87
22.01.2011, 17:27  [ТС] 6
спасибо всем..все понятно)))) сейчас что-нибудь намудрю..
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
22.01.2011, 17:27
Помогаю со студенческими работами здесь

Как вынести часть кода в процедуру?
Вот код программы, как выделенное вынести в процедуру? program privet; label 1; var...

Переделать часть кода через асинхронные потоки
Здравствуйте! Такая проблема: нужно переделать эту часть кода через асинхронные потоки, но ничего...

Массив TPoint не сортируется, если процедуру переделать под X и Y - РАБОТАЕТ
Не смогу сегодня нормально спать из-за этой процедуры. Проверял много раз, недочета не нашел. ...

Отредактировать часть кода, под указателя
Всем привет! Надо сделать программу с указателями, и нужно отредактировать эту часть ...


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2023, CyberForum.ru