Помощь - Поиск - Пользователи - Календарь
Полная версия: В Чем моя ошибка? Процедуры и функций
Форум «Всё о Паскале» > Pascal, Object Pascal > Задачи
Credo
Даны два массива А(10),В(10). В Массивах А(10) и В(10) все элементы предшествующие первому нулевому элементу заменить на 0,5. mega_chok.gif

program pr;
const n=10; p=20;
var
A:array[1..n] of integer;
B:array[1..p] of integer;

procedure a(a:array of integer);
var i:integer;
for i:=1 to 10 do
begin
if a[i]:=0
then break
else a[i]:=0,5;
end;
procedure b(a:array of integer);
var i:integer;
begin
for i:=1 to 20 do
begin
if a[i]:=0
then break
else a[i]:=0,5;
end;

end.

Client
ошибка в том, что если найдешь 0, то цикл завершится. А тебе надо продолжить цикл и заменять элементы
можешь сделать "флаг" - признак того, что нашел ноль
можешь сделать 2 цикла - первый для поиска номера нулевого элемента, второй для замены элементов
Credo
спасибо щас попробую wink.gif
volvo
Credo, это не единственная ошибка. Во-первых, будет конфликт имен, а во-вторых - (ну, куда ж без него) вылет за пределы массива. Потому что открытый массив индексируется с 0, а не с 1. Соответственно, при попытке обратиться к a[10] и b[20] (внутри процедур) будет что?
Credo
ааа blink.gif у меня много ошибок не получается совсем программа
program pr;
const n=10; p=10;
var
A:array[1..n] of real;
B:array[1..p] of real;
procedure d(a:array of real);
var i:integer;
begin
for i:=1 to n do
if a[i]<>0 then
a[i]:=0.5
else
break;
writeln(a[i]:5);
end;

procedure k(a:array of real);
var i:integer;
begin
for i:=1 to p do
begin
if a[i]<>0 then
begin
a[i]:=0.5;
writeln(a[i]:5);
end;
end;
end.
sheka
Цитата
открытый массив
Это что такое?
volvo
Вот это:
procedure a(a:array of integer);
- открытый массив, т.е., ты можешь передать в качестве параметра массив любого размера

Credo, читай внимательнее, некоторые ошибки я тебе перечислил. Исправь их сначала. Потом будем разговаривать дальше.
Credo
исправил smile.gif
volvo
Где именно? Я не вижу исправлений. В коде из сообщения №5 по-прежнему есть указанные ошибки.
Credo
Исправил все что мог но прога не хочет работать smile.gif
program laborotorka;

const n=10; p=10;

uses crt;

var
A:array[1..n] of real;
B:array[1..p] of real;


{--------------------------------------------------------------------}

procedure pervaia(a:array of real);
var
i:integer;
begin
for i:=1 to n do
if a[i]<>0 then
a[i]:=0.5
else
break;
write('a[i]=',a[i]);
end;

{--------------------------------------------------------------------}

procedure vtoraia(b:array of real);
var
i:integer;
begin
for i:=1 to p do
if b[i]<>0 then
b[i]:=0.5
else
break;
write('b[i]=',b[i]);
end;

{--------------------------------------------------------------------}


BEGIN

clrscr;

pervaia;
vtoraia;

readln;

END.


Помогить плз исправьте мою ошибку
TarasBer
Ты почему функции pervaia; и vtoraia; вызываешь без параметров?
volvo
Цитата
Исправил все что мог
Все, что мог и ВСЕ, О ЧЕМ ТЕБЕ СКАЗАЛИ - это разные вещи. Я тебя предупреждал, что массивы индексируются с НУЛЯ? Так какого черта у тебя оба цикла - с единицы начинаются?

Зачем тебе ВООБЩЕ две процедуры? Это все прекрасно делается в одной. Для того и пишется процедура, чтоб одинаковый код не копировать. У тебя смысл процедур в чем? Скопировал один и тот же код, изменил по одной букве? Как была ошибка, так и осталась, теперь править ее надо тоже В ДВУХ местах. Что ты выиграл? В чем смысл описания открытого массива?

Плюс ко всему, твоя реализация даже теоретически не делает того, что требуется в задании:
Цитата
В Массивах А(10) и В(10) все элементы предшествующие первому нулевому элементу заменить на 0,5.
Ты ничего не заменяешь, а просто при выводе ПОДменяешь. А если после того, как процедура отработала, еще раз распечатать массив, что будет?
Credo
спасибо я понел свою ошибку. может мне еще создать процедуру для замены wacko.gif ... ну я совсем не понимаю массивы нужно повторить(
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.