С Новым годом! Форум программистов, компьютерный форум, киберфорум
Free Pascal
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.92/13: Рейтинг темы: голосов - 13, средняя оценка - 4.92
3 / 12 / 0
Регистрация: 26.10.2018
Сообщений: 167
1

Код выводит нули после выделения функции поиска максимума в процедуре

16.02.2019, 15:08. Показов 2585. Ответов 9
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
надо было выделить функцию поиска максимума в процедуре (zam_mx), я сделал, но теперь выводит нули, что не так?
еще надо заменить file of posl на file of integer, чтобы он в итоге уменьшался и сделать вывод через одну процедуру
Первоначальный код:
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
const n=5;
type posl=array[1..n] of integer;
var f:file of posl;
    a:posl;
    procedure vivod_f(var f:file of posl;a:posl);
var i,j:integer;
begin
writeln('Содержание файла F');
for i:=0 to filesize(f)-1 do
 begin
  read(f,a);
  for j:=1 to n do
  write(a[j]:4);
  writeln;
 end;
 end;
 procedure zam_mx(f:file of posl;a:posl;n:byte);
var
i,j,k,mx:integer;
begin
writeln;
reset(f);
for i:=0 to filesize(f)-1 do
 begin
  seek(f,i);
  read(f,a);
  k:=n;
  mx:=a[1];
  for j:=2 to k do
  if a[j]>mx then mx:=a[j];
  k:=1;
  a[k]:=mx;
  seek(f,i);
  write(f,a);
 end;
 end;
 procedure vivod_2(var f:file of posl;a:posl);
var
i,j,k:integer;
begin
k:=1;
writeln('Замена последовательностей их максимальными элементами');
reset(f);
for i:=0 to filesize(f)-1 do
 begin
  read(f,a);
  for j:=1 to k do
  write(a[j]:4);
 end;
 end;
 procedure vvod_a(var f:file of posl;a:posl;n:integer);
var
i,j,m:integer;
begin
repeat
write('Сколько последовательностей ввести в файл от 2 до 20 m=');
readln(m);
until m in [2..20];
randomize;
assign(f,'filef.txt');
rewrite(f);
for i:=1 to m do
 begin
  for j:=1 to n do
  a[j]:=random(100);
  write(f,a);
 end;
 end;
begin
vvod_a(f,a,n);
reset(f);
vivod_f(f,a);
zam_mx(f,a,n);
vivod_2(f,a);
close(f);
end.

Измененный код:
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
const n=5;
type posl=array[1..n] of integer;
var f:file of posl;
    a:posl;
    name:string;
     function get_max(i:integer; f:file of posl;n:byte):file of posl;
     var
     mx,j,k:integer;
     a:posl;     
     begin
     begin
     k:=n;
     mx:=a[1];
  for j:=2 to k do
  if a[j]>mx then mx:=a[j];
  k:=1;
  a[k]:=mx;
  seek(f,i);
  write(f,a);
  end;
  get_max:=f;
  end;
 
    procedure vivod_f(name:string);
var i,j:integer;
begin
writeln('Содержание файла F');
for i:=0 to filesize(f)-1 do
 begin
  read(f,a);
  for j:=1 to n do
  write(a[j]:4);
  writeln;
 end;
 end;
 procedure zam_mx(name:string;n:byte);
var
i,j,k,mx:integer;
a:posl;
begin
writeln;
reset(f);
for i:=0 to filesize(f)-1 do
 begin
  seek(f,i);
  read(f,a);
  get_max(i,f,n)
 end;
 end;
 procedure vivod_2(var f:file of posl;a:posl);
var
i,j,k:integer;
begin
k:=1;
writeln('Замена последовательностей их максимальными элементами');
reset(f);
for i:=0 to filesize(f)-1 do
 begin
  read(f,a);
  for j:=1 to k do
  write(a[j]:4);
 end;
 end;
 procedure vvod_a(var name:string;n:integer);
var
i,j,m:integer;
a:posl;
begin
repeat
write('Сколько последовательностей ввести в файл от 2 до 20 m=');
readln(m);
until m in [2..20];
randomize;
assign(f,name);
rewrite(f);
for i:=1 to m do
 begin
  for j:=1 to n do
  a[j]:=random(100);
  write(f,a);
 end;
 end;
begin
readln(name);
vvod_a(name,n);
reset(f);
vivod_f(name);
zam_mx(name,n);
vivod_2(f,a);
close(f);
end.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
16.02.2019, 15:08
Ответы с готовыми решениями:

Написать программу поиска максимума из трех заданных чисел, используя процедуру поиска максимума из двух чисел
Написать программу поиска максимума из трех заданных чисел, используя процедуру поиска максимума из...

Выводит ли результаты поиска стандартная функция поиска в html? Код привел ниже
При обращении к стандартному поиску в html, код которого приведен ниже, будут ли выводится...

Перегрузка функции поиска максимума с шаблоном
Выполнить задание 1.3.1 лабораторной работы №1, реализовав его через механизм функций и обеспечив...

Как записать код поиска минимума, максимума через метод?
Подскажите пожалуйста, как данный код записать через метод Console.WriteLine("введите 3 числа");...

9
Почетный модератор
64303 / 47600 / 32742
Регистрация: 18.05.2008
Сообщений: 115,181
16.02.2019, 16:05 2
Цитата Сообщение от Бодрый666 Посмотреть сообщение
надо заменить file of posl на file of integer, чтобы он в итоге уменьшался
Я же Вам писал что файл массивов может содержать только массивы, поэтому мы массивы из 5 элементов заменяем на массивы из одного элемента, максимума этого массива.

Добавлено через 1 минуту
А процедуры описываются до начала основной программы, а не где попало.
0
3 / 12 / 0
Регистрация: 26.10.2018
Сообщений: 167
16.02.2019, 16:17  [ТС] 3
Puporev, процедуры я описал до основной программы, а , если я не ошибаюсь, в итоге у нас получается все равно file of posl то есть от 1 до 5, а нужно ,чтобы он уменьшился в ходе выполнения программы.
0
Почетный модератор
64303 / 47600 / 32742
Регистрация: 18.05.2008
Сообщений: 115,181
16.02.2019, 16:19 4
Цитата Сообщение от Бодрый666 Посмотреть сообщение
тобы он уменьшился в ходе выполнения программы.
Количество компонент(последовательностей) не уменьшится, уменьшится их размер, вместо 5 будет по однму.
0
3 / 12 / 0
Регистрация: 26.10.2018
Сообщений: 167
16.02.2019, 16:30  [ТС] 5
Puporev, то есть у нас уже получится не file [1..5] of integer, а file [1..1] of integer ? вот этого я не пойму

Добавлено через 1 минуту
Puporev, а как записать функцию get_max тогда, когда без нее у меня работает, а когда выделяю нет
0
Почетный модератор
64303 / 47600 / 32742
Регистрация: 18.05.2008
Сообщений: 115,181
16.02.2019, 17:01 6
Лучший ответ Сообщение было отмечено Бодрый666 как решение

Решение

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
const n=5;
type posl=array[1..n] of integer;
     tfile=file of posl;
procedure vvod_a(var f:tfile);
var i,j,m:integer;
    a:posl;
    name:string;
begin
write('Введите имя файла');
readln(name);
assign(f,name);
rewrite(f);
repeat
write('Сколько последовательностей ввести в файл от 2 до 20 m=');
readln(m);
until m in [2..20];
randomize;
assign(f,name);
rewrite(f);
for i:=1 to m do
 begin
  for j:=1 to n do
  a[j]:=random(100);
  write(f,a);
 end;
end;     
function get_max(var f:tfile):tfile;
var  a:posl;
     mx,i,j,k:integer;
begin 
reset(f);
k:=n;
for i:=0 to filesize(f)-1 do
 begin
  read(f,a);
  mx:=a[1];
  for j:=2 to k do
  if a[j]>mx then mx:=a[j];
  k:=1;
  a[k]:=mx;
  seek(f,i);
  write(f,a);
 end;
get_max:=f;
end;
procedure vivod_f(var f:tfile);
var i,j:integer;
    a:posl;
begin
writeln('Содержание файла F');
for i:=0 to filesize(f)-1 do
 begin
  read(f,a);
  for j:=1 to n do
  write(a[j]:4);
  writeln;
 end;
end;
 
procedure vivod_2(var f:tfile);
var i,j,k:integer;
    a:posl;
begin
writeln('Замена последовательностей их максимальными элементами');
reset(f);
for i:=0 to filesize(f)-1 do
 begin
  read(f,a);
  write(a[1]:4);
 end;
end;
 
var f:file of posl;
begin
vvod_a(f);
reset(f);
vivod_f(f);
f:=get_max(f);
vivod_2(f);
close(f);
end.
1
3 / 12 / 0
Регистрация: 26.10.2018
Сообщений: 167
16.02.2019, 17:08  [ТС] 7
А нельзя выводить все через одну процедуру vivod_f?
0
Почетный модератор
64303 / 47600 / 32742
Регистрация: 18.05.2008
Сообщений: 115,181
16.02.2019, 18:31 8
Лучший ответ Сообщение было отмечено Бодрый666 как решение

Решение

Думаю нет, в первом случае мы выводим m массивов, во втором случае m чисел. Наверное что-то можно придумать, но зачем?
Я бы вообще сделал программу без процедур, зачем они? Подпрограммы хороши тогда, когда они используются в программе более 1 раза.

Добавлено через 1 час 12 минут
Переписал программу, сделал изменение массивов(чего не было, просто выводил первый элемент), вывод одной процедурой.
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
const n=5;
type posl=array[1..n] of integer;
     tfile=file of posl;
procedure vvod_a(var f:tfile);
var m:integer;
    a:posl;
    name:string;
begin
write('Введите имя файла');
readln(name);
assign(f,name);
rewrite(f);
repeat
write('Сколько последовательностей ввести в файл от 2 до 20 m=');
readln(m);
until m in [2..20];
randomize;
assign(f,name);
rewrite(f);
for var i:=1 to m do
 begin
  for var j:=1 to n do
  a[j]:=random(100);
  write(f,a);
 end;
end;     
function get_max(var f:tfile;var k:integer):tfile;
var  a:posl;
     mx:integer;
begin 
reset(f);
for var i:=0 to filesize(f)-1 do
 begin
  seek(f,i);
  read(f,a);
  mx:=a[1];
  k:=n;
  for var j:=2 to k do
  if a[j]>mx then mx:=a[j];
  a[1]:=mx;
  for var j:=1 to n-1 do//удалим все элементы кроме первого
   begin
    for var p:=2 to k-1 do
    a[p]:=a[p+1];
    k:=k-1;
   end;
  seek(f,i);
  write(f,a);
 end;
get_max:=f;
end;
procedure vivod_f(var f:tfile;k:integer;s:string);
var a:posl;
begin
reset(f);
writeln(s);
for var i:=0 to filesize(f)-1 do
 begin
  read(f,a);
  for var j:=1 to k do
  write(a[j]:4);
  writeln;
 end;
end;
 
var f:file of posl;
    k:integer;
begin
vvod_a(f);
vivod_f(f,n,'Содержание файла F');
f:=get_max(f,k);
vivod_f(f,k,'Замена последовательностей их максимальными элементами');
close(f);
end.
1
3 / 12 / 0
Регистрация: 26.10.2018
Сообщений: 167
16.02.2019, 18:32  [ТС] 9
Puporev, Огромное вам спасибо)))))
0
3 / 12 / 0
Регистрация: 26.10.2018
Сообщений: 167
26.02.2019, 14:03  [ТС] 10
Нельзя ли это все сделать не через file of posl, а через file of integer?
0
26.02.2019, 14:03
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
26.02.2019, 14:03
Помогаю со студенческими работами здесь

Как оптимизировать код поиска слов и их выделения цветом в RichTextBox
Написал код поиска слов и их выделения цветом в RichTextBox: Dim Props() As String...

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

Выводит нули после точки в вещественном числе
Во втором массиве у выведенных чисел нули после точки, как исправить? #include<stdio.h>...

Как составить эту программу для поиска максимума функции?
Написать метод, вычисляющий значение x2 * y3 * √z . С его помощью определить с какой тройкой...


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

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru