Форум программистов, компьютерный форум, киберфорум
Pascal (Паскаль)
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.83/6: Рейтинг темы: голосов - 6, средняя оценка - 4.83
0 / 0 / 0
Регистрация: 19.12.2015
Сообщений: 7

Найти ошибку в процедуре

21.12.2015, 05:12. Показов 1403. Ответов 10
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Даны два одномерных массива длиной n. Поменять местами 1-й и последний элементы в каждом массиве. Вывести на экран данные и полученные массивы. Операцию обмена 1-го и последнего элемента оформить в виде процедуры. Вывод массивов на экран также оформить в виде процедуры.
Процедура вывода работает, а с процедурой обмена не могу разобраться, не работает она.
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
Program laba14var7;
USES CRT;
Type mas=array [1..100] of integer;
Var
 A,B:mas;
 i,n:integer;
Procedure obmen (x:mas; n:integer; var i:integer);
 Begin
  i:=a[1];
  x[1]:=x[n];
  x[n]:=i;
 End;
Procedure vivod(X:mas);
 var k:integer;
 Begin
  For k:=1 to n do
  writeln(X[k]:2);
 End;
Begin
 CLRSCR;
 randomize;
 Writeln ('vvedite n');
 Readln (n);
 For i:=1 to n do
  begin
   A[i]:=random(10);
   B[i]:=random(10);
  end;
Writeln ('Massiv A');
vivod(A);
Writeln ('Massiv B');
vivod(B);
Writeln ('Massiv A*');
obmen(A,n,i);
vivod(A);
Writeln ('Massiv B*');
obmen(B,n,i);
vivod(B);
Readln;
End.
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
21.12.2015, 05:12
Ответы с готовыми решениями:

Найти ошибку в процедуре LU-разложения матриц
Помогите пожалуйста найти ошибку в процедуре которая должна реализовывать метод LU-разложения матриц. У меня при работе программы...

Найдите ошибку в процедуре
type ref=^string; tekst=array of ref; procedure Move(var f:text; i,j:integer); var x:tekst; l:integer; s:string; begin ...

Двумерный массив. Поиск нулей.Не могу найти ошибку ошибку в коде
Вот,например массив 5 5 0 1 0 1 0 1 1 1 1 1 0 0 0 0 1 0 0 1 0 0 1 0 0 0 0 считываются два числа m и n и далее в выходной...

10
Почетный модератор
 Аватар для Puporev
64315 / 47611 / 32743
Регистрация: 18.05.2008
Сообщений: 115,167
21.12.2015, 10:02
Лучший ответ Сообщение было отмечено max3490 как решение

Решение

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
Program laba14var7;
USES CRT;
Type mas=array [1..100] of integer;
 
Procedure obmen (var x:mas; n:integer);
var i:integer;
Begin
i:=x[1];
x[1]:=x[n];
x[n]:=i;
End;
Procedure vivod(X:mas;n:integer);
var k:integer;
Begin
For k:=1 to n do
write(X[k]:4);
writeln;
End;
Var
 A,B:mas;
 i,n:integer;
Begin
 CLRSCR;
 randomize;
 Writeln ('vvedite n');
 Readln (n);
 For i:=1 to n do
  begin
   A[i]:=random(100);
   B[i]:=random(100);
  end;
Writeln ('Massiv A');
vivod(A,n);
Writeln ('Massiv B');
vivod(B,n);
Writeln ('Massiv A*');
obmen(A,n);
vivod(A,n);
Writeln ('Massiv B*');
obmen(B,n);
vivod(B,n);
Readln;
End.
1
Модератор
10448 / 5739 / 3407
Регистрация: 17.08.2012
Сообщений: 17,458
21.12.2015, 12:06
Лучший ответ Сообщение было отмечено Памирыч как решение

Решение

Не по теме:

Опоздал с ответом, долго писал. Всё равно отвечу.

Ясное дело, не работает.

Потому что Вы передаёте массив по значению, а не по ссылке. И поэтому в основной программе значения элементов массива никак не изменяются. И вообще, массивы, особенно больших размеров, лучше передавать по ссылке, так как в этом случае в подпрограмму передаётся только ссылка на массив, а не копируется весь массив целиком.

И ещё, непонятно для чего, передаёте в процедуру obmen глобальную переменную, которую в процедуре используете как буфер.

И ещё, это нехорошо, без особой на то необходимости объявлять глобальные переменные до описания процедур, поскольку в этом случае глобальные переменные будут видны в процедурах, что может вызвать трудноустранимые ошибки. Например, Вы уже такую трудноустранимую ошибку допустили: в процедуре obmen у Вас фигурирует и локальный массив "x", и глобальный массив "a". Что-то мне подсказывает, что Вы этого не планировали.

Ну и, в процедуре vyvod Вы используете глобальную переменную n, что нехорошо.

И массивы в столбик выводите, когда куда как нагляднее в строчку выводить.

И точки с запятой кое-где лишние.

И модуль CRT незачем использовать только ради чистки экрана, если, конечно, это специально не оговаривается, или если это действительно требуется.

Ещё проверки ввода у Вас нет. Просто табу недостаточно.

Вот, исправил:
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
Const
  m = 100;
Type mas=array [1..m] of integer;
Procedure obmen (var x:mas; n:integer);
var tmp: integer;
 Begin
  tmp:=x[1];
  x[1]:=x[n];
  x[n]:=tmp
 End;
Procedure vivod(s: string; var X:mas; n:integer);
 var k:integer;
 Begin
  Writeln('Massiv ',s);
  For k:=1 to n do
   write(X[k]:2);
  writeln
 End;
Var
 A,B:mas;
 i,n:integer;
Begin
 randomize;
 repeat
  Write('vvedite n v diapazone 1..', m, ': ');
  Readln (n)
 until (n >= 1) and (n <= m);
 For i:=1 to n do
  begin
   A[i]:=random(10);
   B[i]:=random(10)
  end;
vivod('A',A,n);
vivod('B',B,n);
obmen(A,n);
vivod('A*',A,n);
obmen(B,n);
vivod('B*',B,n);
Readln
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
Procedure obmen (var x:array of integer; n:integer);
var tmp: integer;
 Begin
  tmp:=x[0];
  x[0]:=x[n-1];
  x[n-1]:=tmp
 End;
Procedure vivod(s: string; var x:array of integer; n:integer);
 var k:integer;
 Begin
  Writeln('Massiv ',s);
  For k:=0 to n-1 do
   write(x[k]:2);
  writeln
 End;
Const
  m = 100;
Var
 A,B:array [1..m] of integer;
 i,n:integer;
Begin
 randomize;
 repeat
  Write('vvedite n v diapazone 1..', m, ': ');
  Readln (n)
 until (n >= 1) and (n <= m);
 For i:=1 to n do
  begin
   A[i]:=random(10);
   B[i]:=random(10)
  end;
 vivod('A',A,n);
 vivod('B',B,n);
 obmen(A,n);
 vivod('A*',A,n);
 obmen(B,n);
 vivod('B*',B,n);
Readln
End.
1
Почетный модератор
 Аватар для Puporev
64315 / 47611 / 32743
Регистрация: 18.05.2008
Сообщений: 115,167
21.12.2015, 12:18
Цитата Сообщение от Cyborg Drone Посмотреть сообщение
И модуль CRT незачем использовать только ради чистки экрана
А я не согласен, чистый экран всегда лучше чем с ненужными надписями.
0
0 / 0 / 0
Регистрация: 19.12.2015
Сообщений: 7
21.12.2015, 12:19  [ТС]
Цитата Сообщение от Cyborg Drone Посмотреть сообщение
И модуль CRT незачем использовать только ради чистки экрана
препод требует)
0
Модератор
10448 / 5739 / 3407
Регистрация: 17.08.2012
Сообщений: 17,458
21.12.2015, 12:37
max3490, ну, раз требует, вставьте.

Цитата Сообщение от Puporev Посмотреть сообщение
чистый экран всегда лучше
Да согласен, согласен. Просто со времён DOS у меня энграмма осталась насчёт этого CLRSCR. Особенно при отладке, полезно было видеть, что предыдущий запуск программы выдал, или если нужно сверяться с чем-то было... Не уберёшь, бывало, этот CLRSCR, запустишь программу и сидишь, как дурак, пытаясь вспомнить, что там на экране было... Короче, этот вредоносный CLRSCR в те времена я только в окончательный релиз вставлял, да и то не всегда.
0
Почетный модератор
 Аватар для Puporev
64315 / 47611 / 32743
Регистрация: 18.05.2008
Сообщений: 115,167
21.12.2015, 12:41
Цитата Сообщение от Cyborg Drone Посмотреть сообщение
этот вредоносный CLRSCR в те времена я только в окончательный релиз
Так я и пишу здесь окончательный...
0
Модератор
10448 / 5739 / 3407
Регистрация: 17.08.2012
Сообщений: 17,458
21.12.2015, 12:50
И в окончательных всегда пользы никакой от него не было, за исключением эстетики, или когда он действительно был нужен... Да и кобель с ним, дело вкуса, по-моему... Видно, у меня этот вкус не то плохой, не то слишком запасливый, что ли...
0
Почетный модератор
 Аватар для Puporev
64315 / 47611 / 32743
Регистрация: 18.05.2008
Сообщений: 115,167
21.12.2015, 13:34
Цитата Сообщение от Cyborg Drone Посмотреть сообщение
Видно, у меня этот вкус не то плохой, не то слишком запасливый, что ли...
Да нет, я и от других слышал что не дай бог clrscr...
0
Модератор
Эксперт Pascal/DelphiЭксперт NIX
 Аватар для bormant
7816 / 4635 / 2837
Регистрация: 22.11.2013
Сообщений: 13,159
Записей в блоге: 1
22.12.2015, 09:31
Cyborg Drone,
тоже не сторонник бездумного ClrScr.
Если речь о полноэкранном приложении с позиционным выводом по GotoXY, тут никуда не деться (зато потоковый вывод страдает).
Если же обычный диалог с потоковый вводом выводом, никакой от ClrScr пользы окромя вреда. Если нужен кому чистый экран, командой ОС перед вызовом программы (cls, clear) себе свою хотелку обеспечит, зато перенаправление из/в файлы на кашу не похоже.
0
Модератор
10448 / 5739 / 3407
Регистрация: 17.08.2012
Сообщений: 17,458
22.12.2015, 13:04
bormant, точно. Грязный экран на скорость полёта не влияет, даже иногда в чём-то помогает, зато размер программы поскромнее, и как-то оно предсказуемо всё получается...
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
22.12.2015, 13:04
Помогаю со студенческими работами здесь

Программа пишет ошибку!! Помогите найти ошибку
Program Summa; var i, N, M: integer; begin Writeln ('Введите значение N:'); Read (N); M:=0; For i:=1 To N ...

В заданном одномерном массиве найти наименьшее из нечётных чисел, найти ошибку
Условие В заданном одномерном массиве N&lt;=40 найти наименьшее из нечётных чисел . Вот моя программа ,но она не правильно...

Найти восьмую степень числа, исопльзуя только умножение за три операции. Найти ошибку
Дано число a. Используя только умножение, получить значение a8 за три операции. нужен ввод 2-ой переменной или другая формула.(иначе...

Найти фамилию и имя студента 2-го курса, который учится хуже остальных. Найти ошибку в коде
Здравствуйте. Условие: Сведения о студентах содержат следующую информацию: фамилия, имя, курс, оценки по предметам (математика,...

Исправить ошибку в процедуре
убейте меня пож, всю ночь потратил на это. Как исправить ту ошибку? Var N,M,i,j,row : integer; myArray: array of integer; ...


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

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
Новые блоги и статьи
Автозаполнение реквизита при выборе элемента справочника
Maks 27.03.2026
Программный код из решения ниже на примере нетипового документа "ЗаявкаНаРемонтСпецтехники" разработанного в конфигурации КА2. При выборе "Спецтехники" (Тип Справочник. Спецтехника), заполняется. . .
Сумматор с применением элементов трёх состояний.
Hrethgir 26.03.2026
Тут. https:/ / fips. ru/ EGD/ ab3c85c8-836d-4866-871b-c2f0c5d77fbc Первый документ красиво выглядит, но без схемы. Это конечно не даёт никаких плюсов автору, но тем не менее. . . всё может быть. . .
Автозаполнение реквизитов при создании документа
Maks 26.03.2026
Программный код из решения ниже размещается в модуле объекта документа, в процедуре "ПриСозданииНаСервере". Алгоритм проверки заполнения реализован для исключения перезаписи значения реквизита,. . .
Команды формы и диалоговое окно
Maks 26.03.2026
1. Команда формы "ЗаполнитьЗапчасти". Программный код из решения ниже на примере нетипового документа "ЗаявкаНаРемонтСпецтехники" разработанного в конфигурации КА2. В качестве источника данных. . .
Кому нужен AOT?
DevAlt 26.03.2026
Решил сделать простой ланчер Написал заготовку: dotnet new console --aot -o UrlHandler var items = args. Split(":"); var tag = items; var id = items; var executable = args;. . .
Отправка уведомления на почту при изменении наименования справочника
Maks 24.03.2026
Программная отправка письма электронной почты на примере изменения наименования типового справочника "Склады" в конфигурации БП3. Перед реализацией необходимо выполнить настройку системной учетной. . .
модель ЗдравоСохранения 5. Меньше увольнений- больше дохода!
anaschu 24.03.2026
Теперь система здравосохранения уменьшает количество увольнений. 9TO2GP2bpX4 a42b81fb172ffc12ca589c7898261ccb/ https:/ / rutube. ru/ video/ a42b81fb172ffc12ca589c7898261ccb/ Слева синяя линия -. . .
Midnight Chicago Blues
kumehtar 24.03.2026
Такой Midnight Chicago Blues, знаешь?. . Когда вечерние улицы становятся ночными, а ты не можешь уснуть. Ты идёшь в любимый старый бар, и бармен наливает тебе виски. Ты смотришь на пролетающие. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru