Страница 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,
" писал(а):
Код: Выделить всё
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
" писал(а):В цикле 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;