Програмисты помогите новичку Pascal
-
- Сообщения: 296
- Зарегистрирован: 13 фев 2008, 20:10
- Откуда: Беларусь. Орша
- Контактная информация:
1) ошибка в присваивании: в счетчике нельзя изменять значение, так что не I:=o, a O:=i;
2) В конце проги перед END'ом поставь Readln выход будет осуществляться на нажатие любой клавиши (можно сделать так, что выходить будет только на ESC)
3) если внести эти изменения, и работать по твоему коду, то вместо последнего числа прога выводит просто 0. ноль кстати так же явл четным числом, так что мой вариант вернее. и ты можешь конкретно описать, какие требования к программе? и я тебе ее напишу
2) В конце проги перед END'ом поставь Readln выход будет осуществляться на нажатие любой клавиши (можно сделать так, что выходить будет только на ESC)
3) если внести эти изменения, и работать по твоему коду, то вместо последнего числа прога выводит просто 0. ноль кстати так же явл четным числом, так что мой вариант вернее. и ты можешь конкретно описать, какие требования к программе? и я тебе ее напишу
Если назначен специальный человек для контроля за чистотой исходной информации, то найдется изобратательный идиот, который придумает способ, чтобы неправильная информация прошла этот контроль.
-
- Сообщения: 375
- Зарегистрирован: 31 авг 2007, 03:06
Freeeej,
Вы, наверное, хотели присвоить наоборот o:= i;
(и это если ещё не придираться к тому, что поиск последнего чётного элемента лучше делать с конца массива, циклом while или repeat и прерывать цикл, когда нашли. ;-))
удаление, думаю, будет так (полагаем, что в o у нас индекс последнего чётного элемента):
и ещё, последний штришок...
я бы и размерность массива уменьшил на единицу (ведь мы же УДАЛИЛИ элемент массива!): n:=n-1;
извините, но 1) это неправильно (по правилам нельзя изменять переменную цикла for в самом цикле), а 2) - это бред!!" писал(а):Код: Выделить всё
for i:=1 to n do If a[i] mod 2 = 0 then i:=o;
Вы, наверное, хотели присвоить наоборот o:= i;
(и это если ещё не придираться к тому, что поиск последнего чётного элемента лучше делать с конца массива, циклом while или repeat и прерывать цикл, когда нашли. ;-))
удаление, думаю, будет так (полагаем, что в o у нас индекс последнего чётного элемента):
Код: Выделить всё
for i:=o to (n-1) do
a[i]:=a[i+1];
a[n]:=0;
я бы и размерность массива уменьшил на единицу (ведь мы же УДАЛИЛИ элемент массива!): n:=n-1;
-
- Сообщения: 375
- Зарегистрирован: 31 авг 2007, 03:06
извините, прокосячил чуток... писал, не открыв последнюю страницу...
если бы увидел ответ C_O_D_E (по сути тоже, что и я написал, только раньше ;-), я бы, разумеется, ничего сюда постить не стал...
если бы увидел ответ C_O_D_E (по сути тоже, что и я написал, только раньше ;-), я бы, разумеется, ничего сюда постить не стал...
Вайл, антил... А что, даунту уже отменили?
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;
все
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;
все
Искусство программирования - заставить компьютер делать все то, что вам делать лень.
Для "спасибо" есть кнопка "Спасибо" в виде звездочки внизу под ником автора поста.
Для "спасибо" есть кнопка "Спасибо" в виде звездочки внизу под ником автора поста.
2 C_O_D_E&&Serge_Bliznykov
В цикле for можно менять значение счетчика!
В цикле for можно менять значение счетчика!
Плохая привычка, в дельфях не проканает. И вообще дурной тон." писал(а):В цикле for можно менять значение счетчика!
It's a long way to the top if you wanna rock'n'roll
-
- Сообщения: 296
- Зарегистрирован: 13 фев 2008, 20:10
- Откуда: Беларусь. Орша
- Контактная информация:
2 drummer
Теоретически можно, компилятор прорабатывает, даж програ иногда считает, но не всегда . иногда изменение порядкового чмслительного (в смысле счетчика) ведет к едва заметным ошибках. особенно в рекурсии. это чисто если основываться на личной практике, а опираясь на теорию и вспоминая что там говориться о Т-триггерах (т.е. по своей сути счетчиках) начинаешь задумываться, как можно в программе присвоить какое-либо значение I (который явл счетчиком), когда триггер знает что после 2 идет 3, а никак не 5 (*это для примера*)
Теоретически можно, компилятор прорабатывает, даж програ иногда считает, но не всегда . иногда изменение порядкового чмслительного (в смысле счетчика) ведет к едва заметным ошибках. особенно в рекурсии. это чисто если основываться на личной практике, а опираясь на теорию и вспоминая что там говориться о Т-триггерах (т.е. по своей сути счетчиках) начинаешь задумываться, как можно в программе присвоить какое-либо значение I (который явл счетчиком), когда триггер знает что после 2 идет 3, а никак не 5 (*это для примера*)
Если назначен специальный человек для контроля за чистотой исходной информации, то найдется изобратательный идиот, который придумает способ, чтобы неправильная информация прошла этот контроль.
Я просто сказал, что можно. Сам это юзаю редко. Дэльфи это отдельная тема.
Вот единственный случай, когда я это пишу. Иногда бывает полезно. И работало всегда и без ошибок.
Вот единственный случай, когда я это пишу. Иногда бывает полезно. И работало всегда и без ошибок.
Код: Выделить всё
for i := 1 to n do
begin
{something}
if () then i:=n;
end;
А не проще ли
if () then break;
Ровно тот же результат.
if () then break;
Ровно тот же результат.
Искусство программирования - заставить компьютер делать все то, что вам делать лень.
Для "спасибо" есть кнопка "Спасибо" в виде звездочки внизу под ником автора поста.
Для "спасибо" есть кнопка "Спасибо" в виде звездочки внизу под ником автора поста.
Тот же, если после этого if-а не нужны еще какие-либо операторы. Т.е. вроде этого:Хыиуду писал(а):А не проще ли
if () then break;
Ровно тот же результат.
Код: Выделить всё
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;