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

C_O_D_E
Сообщения: 296
Зарегистрирован: 13 фев 2008, 20:10
Откуда: Беларусь. Орша
Контактная информация:

1) ошибка в присваивании: в счетчике нельзя изменять значение, так что не I:=o, a O:=i;
2) В конце проги перед END'ом поставь Readln выход будет осуществляться на нажатие любой клавиши (можно сделать так, что выходить будет только на ESC)
3) если внести эти изменения, и работать по твоему коду, то вместо последнего числа прога выводит просто 0. ноль кстати так же явл четным числом, так что мой вариант вернее. и ты можешь конкретно описать, какие требования к программе? и я тебе ее напишу
Если назначен специальный человек для контроля за чистотой исходной информации, то найдется изобратательный идиот, который придумает способ, чтобы неправильная информация прошла этот контроль.
Serge_Bliznykov
Сообщения: 375
Зарегистрирован: 31 авг 2007, 03:06

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;
Serge_Bliznykov
Сообщения: 375
Зарегистрирован: 31 авг 2007, 03:06

извините, прокосячил чуток... писал, не открыв последнюю страницу...
если бы увидел ответ C_O_D_E (по сути тоже, что и я написал, только раньше ;-), я бы, разумеется, ничего сюда постить не стал...
Хыиуду
Сообщения: 2442
Зарегистрирован: 06 мар 2005, 21:03
Откуда: Москва
Контактная информация:

Вайл, антил... А что, даунту уже отменили?
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;
все
Искусство программирования - заставить компьютер делать все то, что вам делать лень.
Для "спасибо" есть кнопка "Спасибо" в виде звездочки внизу под ником автора поста.
drummer
Сообщения: 61
Зарегистрирован: 13 янв 2008, 18:43

2 C_O_D_E&&Serge_Bliznykov
В цикле for можно менять значение счетчика!
Аватара пользователя
somewhere
Сообщения: 1858
Зарегистрирован: 31 авг 2006, 17:14
Откуда: 71 RUS
Контактная информация:

&quot писал(а):В цикле for можно менять значение счетчика!
Плохая привычка, в дельфях не проканает. И вообще дурной тон.
It's a long way to the top if you wanna rock'n'roll
C_O_D_E
Сообщения: 296
Зарегистрирован: 13 фев 2008, 20:10
Откуда: Беларусь. Орша
Контактная информация:

2 drummer
Теоретически можно, компилятор прорабатывает, даж програ иногда считает, но не всегда . иногда изменение порядкового чмслительного (в смысле счетчика) ведет к едва заметным ошибках. особенно в рекурсии. это чисто если основываться на личной практике, а опираясь на теорию и вспоминая что там говориться о Т-триггерах (т.е. по своей сути счетчиках) начинаешь задумываться, как можно в программе присвоить какое-либо значение I (который явл счетчиком), когда триггер знает что после 2 идет 3, а никак не 5 (*это для примера*)
Если назначен специальный человек для контроля за чистотой исходной информации, то найдется изобратательный идиот, который придумает способ, чтобы неправильная информация прошла этот контроль.
drummer
Сообщения: 61
Зарегистрирован: 13 янв 2008, 18:43

Я просто сказал, что можно. Сам это юзаю редко. Дэльфи это отдельная тема.

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

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

for i := 1 to n do
   begin
     {something}
     if () then i:=n;
   end;
Хыиуду
Сообщения: 2442
Зарегистрирован: 06 мар 2005, 21:03
Откуда: Москва
Контактная информация:

А не проще ли
if () then break;
Ровно тот же результат.
Искусство программирования - заставить компьютер делать все то, что вам делать лень.
Для "спасибо" есть кнопка "Спасибо" в виде звездочки внизу под ником автора поста.
BBB
Сообщения: 1298
Зарегистрирован: 27 дек 2005, 13:37

Хыиуду писал(а):А не проще ли
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;
Ответить