Страница 4 из 6

Re: Програмисты помогите новичку Pascal

Добавлено: 14 фев 2008, 23:46
C_O_D_E
1) ошибка в присваивании: в счетчике нельзя изменять значение, так что не I:=o, a O:=i;
2) В конце проги перед END'ом поставь Readln выход будет осуществляться на нажатие любой клавиши (можно сделать так, что выходить будет только на ESC)
3) если внести эти изменения, и работать по твоему коду, то вместо последнего числа прога выводит просто 0. ноль кстати так же явл четным числом, так что мой вариант вернее. и ты можешь конкретно описать, какие требования к программе? и я тебе ее напишу

Re: Програмисты помогите новичку Pascal

Добавлено: 15 фев 2008, 03:34
Serge_Bliznykov
Freeeej,
&quot писал(а):

Код: Выделить всё

for i:=1 to n do
If a[i] mod 2 = 0 then i:=o;
извините, но 1) это неправильно (по правилам нельзя изменять переменную цикла for в самом цикле), а 2) - это бред!!
Вы, наверное, хотели присвоить наоборот o:= i;
(и это если ещё не придираться к тому, что поиск последнего чётного элемента лучше делать с конца массива, циклом while или repeat и прерывать цикл, когда нашли. ;-))

удаление, думаю, будет так (полагаем, что в o у нас индекс последнего чётного элемента):

Код: Выделить всё

for i:=o to (n-1) do
   a[i]:=a[i+1];
a[n]:=0;
и ещё, последний штришок...
я бы и размерность массива уменьшил на единицу (ведь мы же УДАЛИЛИ элемент массива!): n:=n-1;

Re: Програмисты помогите новичку Pascal

Добавлено: 15 фев 2008, 03:38
Serge_Bliznykov
извините, прокосячил чуток... писал, не открыв последнюю страницу...
если бы увидел ответ C_O_D_E (по сути тоже, что и я написал, только раньше ;-), я бы, разумеется, ничего сюда постить не стал...

Re: Програмисты помогите новичку Pascal

Добавлено: 15 фев 2008, 12:07
Хыиуду
Вайл, антил... А что, даунту уже отменили?
for i:=N downto 1 do
if A mod 2=0 then break
for j:=i+1 to N do
A[j-1]:=A[j];
A[N]:=0;
все

Re: Програмисты помогите новичку Pascal

Добавлено: 15 фев 2008, 20:53
drummer
2 C_O_D_E&&Serge_Bliznykov
В цикле for можно менять значение счетчика!

Re: Програмисты помогите новичку Pascal

Добавлено: 15 фев 2008, 20:58
somewhere
&quot писал(а):В цикле for можно менять значение счетчика!
Плохая привычка, в дельфях не проканает. И вообще дурной тон.

Re: Програмисты помогите новичку Pascal

Добавлено: 15 фев 2008, 21:15
C_O_D_E
2 drummer
Теоретически можно, компилятор прорабатывает, даж програ иногда считает, но не всегда . иногда изменение порядкового чмслительного (в смысле счетчика) ведет к едва заметным ошибках. особенно в рекурсии. это чисто если основываться на личной практике, а опираясь на теорию и вспоминая что там говориться о Т-триггерах (т.е. по своей сути счетчиках) начинаешь задумываться, как можно в программе присвоить какое-либо значение I (который явл счетчиком), когда триггер знает что после 2 идет 3, а никак не 5 (*это для примера*)

Re: Програмисты помогите новичку Pascal

Добавлено: 16 фев 2008, 00:38
drummer
Я просто сказал, что можно. Сам это юзаю редко. Дэльфи это отдельная тема.

Вот единственный случай, когда я это пишу. Иногда бывает полезно. И работало всегда и без ошибок.

Код: Выделить всё

for i := 1 to n do
   begin
     {something}
     if () then i:=n;
   end;

Re: Програмисты помогите новичку Pascal

Добавлено: 18 фев 2008, 11:02
Хыиуду
А не проще ли
if () then break;
Ровно тот же результат.

Re: Програмисты помогите новичку Pascal

Добавлено: 18 фев 2008, 17:05
BBB
Хыиуду писал(а):А не проще ли
if () then break;
Ровно тот же результат.
Тот же, если после этого if-а не нужны еще какие-либо операторы. Т.е. вроде этого:

Код: Выделить всё

for i := 1 to n do
  begin
     {something}
     if () then i:=n;
     {something more}
   end;
Но согласен, тон дурной.
В конце концов, если уж хочется спользовать эту технологию, то можно испоользовать не for-цикл, а while. Правда, в этом случае писаниты будет чуть-чуть больше :)

Код: Выделить всё

  i := 1;
  while (i <= n) do
   begin
     {something}
     if () then i:=n;
     {something more}
     Inc (i);
   end;