Версия для печати темы

Нажмите сюда для просмотра этой темы в обычном формате

Форум «Всё о Паскале» _ Задачи _ В Чем моя ошибка? Процедуры и функций

Автор: Credo 2.11.2010 0:04

Даны два массива А(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 2.11.2010 0:11

ошибка в том, что если найдешь 0, то цикл завершится. А тебе надо продолжить цикл и заменять элементы
можешь сделать "флаг" - признак того, что нашел ноль
можешь сделать 2 цикла - первый для поиска номера нулевого элемента, второй для замены элементов

Автор: Credo 2.11.2010 0:17

спасибо щас попробую wink.gif

Автор: volvo 2.11.2010 0:59

Credo, это не единственная ошибка. Во-первых, будет конфликт имен, а во-вторых - (ну, куда ж без него) вылет за пределы массива. Потому что открытый массив индексируется с 0, а не с 1. Соответственно, при попытке обратиться к a[10] и b[20] (внутри процедур) будет что?

Автор: Credo 2.11.2010 1:26

ааа 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 2.11.2010 1:27

Цитата
открытый массив
Это что такое?

Автор: volvo 2.11.2010 1:40

Вот это:
procedure a(a:array of integer);
- открытый массив, т.е., ты можешь передать в качестве параметра массив любого размера

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

Автор: Credo 2.11.2010 1:42

исправил smile.gif

Автор: volvo 2.11.2010 2:57

Где именно? Я не вижу исправлений. В коде из сообщения №5 по-прежнему есть указанные ошибки.

Автор: Credo 2.11.2010 18:55

Исправил все что мог но прога не хочет работать 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 2.11.2010 19:03

Ты почему функции pervaia; и vtoraia; вызываешь без параметров?

Автор: volvo 2.11.2010 19:22

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

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

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

Автор: Credo 2.11.2010 20:12

спасибо я понел свою ошибку. может мне еще создать процедуру для замены wacko.gif ... ну я совсем не понимаю массивы нужно повторить(