Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2006.03.26;
Скачать: [xml.tar.bz2];

Вниз

Написанную в паскале....   Найти похожие ветки 

 
Silica ©   (2006-03-05 10:07) [0]

программу хочу переделать под дельфи.
Вот код в дельфи в консольном режиме:

...
var i, N, BEG, FIN, BEFORE, COLOR : integer;
   A : array[1..4] of integer;
begin
 writeln("Vvedite kolichestvo kartochek:");
 readln(N);
 writeln("Vvedite nachalnii element:");
 readln(BEG);
 writeln("Vvedite konechnii element:");
 readln(FIN);
//  N := 10;
//  BEG := 1;
//  FIN := 10;
 A[FIN]:=BEG; {следующий за последним элементом – бывший первый}
 FIN:=BEG; {меняем ссылку на последний элемент}
 BEG:=A[BEG]; {новый первый элемент}
 A[FIN]:=0; {корректировка ссылки у последнего элемента}
 for i:=1 to N-1 do A[i]:=i+1;
 A[N]:=0; {установка ссылок в списке}
 BEG:=1; FIN:=N;
 COLOR:=1; {белый цвет = 1, черный = 0}
 while A[BEG]<>0 do
 {пока первый элемент не является} {одновременно и последним}
 begin
   BEFORE:=BEG; {сохраняем индекс начала списка}
   BEG:=A[BEG]; {удаляем первый элемент из списка}
   A[BEFORE]:=COLOR; {раскрашиваем удаленный элемент}
   {в нужный цвет}
   COLOR:=1-COLOR; {меняем цвет}
   A[FIN]:=BEG;  {переставляем элемент из}
   FIN:=BEG;  {начала списка в конец}
   BEG:=A[BEG];
   A[FIN]:=0
end;
A[BEG]:=COLOR;  {раскрашиваем последний элемент}
{списка}
for i:=1 to N do  {распечатка цветов}
if A[i]=0
then writeln("element", " " , i, " - chernii")
else writeln("element", " " , i, " - belii");
readln;
end.

А следующий код уже с формой и т.д.

procedure TForm1.Button1Click(Sender: TObject);
var i, n, nach, kon, pred, color : integer;
   a : array [1..4] of integer;
begin
 n := strtoint(edit1.text);
 nach := strtoint(edit2.text);
 kon := strtoint(edit3.Text);
 a[kon] := nach;{следующий за последним элементом - бывший первый}
 kon := nach;{меняем ссылку на последний элемент}
 nach := a[nach];{новый первый элемент}
 a[kon] := 0;{корректировка ссылки у последнего элемента}
 for i := 1 to n - 1 do
 a[i] := i + 1;
 a[n] := 0; {установка ссылок в списке}
 nach := 1;
 kon := n;
 color := 1;{белый цвет = 1, черный = 0}
 while a[nach] <> 0 do
 {пока первый элемент не является одновременно и последним}
 begin
   pred := nach;{сохраняем индекс начала списка}
   nach := a[nach];{удаляем первый элемент из списка}
   a[pred] := color;{раскрашиваем удаленный элемент в нужный цвет}
   color := 1 - color;{меняем цвет}
   a[kon] := nach;{переставляем элемент}
   kon := nach;{из начала списка в конец}
   nach := a[nach];
   a[kon] := 0;
 end;
 a[nach] := color;{раскрашиваем последний элемент списка}
 for i := 1 to n do{распечатка цветов}
 if a[i] = 0 then
   Memo1.Lines.Add("элемент" + " " + inttostr(i) + "- черный");
 if a[i] = 1 then
 begin
   Memo1.Lines.Add("элемент" + " " + inttostr(i) + "- белый");
 end;
end;
end.

У меня не получается вывести в МЕМО список так же как и консольном режиме.

Суть программы такова: имеется n черных и белых карточек, сложенных в стопку. Карточки раскладываются на стол в одну линию следующим образом: первая кладется на стол, вторая под низ стопки, третья- на стол, четвертая - под низ стопки и т.д., пока все карточки не будут выложены на стол. Каким должно быть исходное расположение карточек в стопке, чтобы разложенные на столе карточки чередовались по цвету: белая, черная, белая, черная и т.д.
Нужно вывести правильную комбинацию карточек.
Подскажите пожалуйста, какой код  с МЕМО нужен... :)


 
Marser ©   (2006-03-05 11:20) [1]

> У меня не получается вывести в МЕМО список так же как и
> консольном режиме.

На вскидку видно, что добавляете вы правильно. Просто вам нужно установить моноширинный шрифт, например Courier


 
Silica ©   (2006-03-05 20:09) [2]

А причем тут шрифт? При нажатии на кнопку высвечивается ошибка. Список вообще не выводится. Не помню, что написала, но было так, что он вывел мне в МЕМО одну строку "элемент 1 - белый". После изменений вообще теперь ничего не выводится. :(


 
Marser ©   (2006-03-05 20:59) [3]

Узких мест очень много. Например:
a : array [1..4] of integer;
nach := strtoint(edit2.text);
kon := strtoint(edit3.Text);
a[kon] := nach;{следующий за последним элементом - бывший первый}

Потенциально может обратиться к пятому элементу массива - ошибка.
memo1.lines.add при многих вариатах входных данных просто не может выполняться, как не выполнился бы там WriteLn и вообще что угодно.
Вы знакомы с отладчиком? Пройдитесь по своему коду с F7/F8 и многое станет ясно. Не на Делфи надо пенять.


 
Silica ©   (2006-03-06 13:02) [4]

Marser, а в консольном режиме то программа работает. И writeln работает, все выводит как надо.
P.S. Я вообще то на дельфи и не пеняла. :) Тут то проблема в том, что я не могу написать правильно код, не дельфи же это за меня делает. :)


 
umbra ©   (2006-03-06 13:15) [5]


> При нажатии на кнопку высвечивается ошибка

какая, если не секрет?


 
Silica ©   (2006-03-07 14:03) [6]

umbra:

... rased exception class EAccessViolation whith message "Access violation at address OOOOOOOB. Read of address OOOOOOOB". Process stoped...

Вот такая вот ошибка. Я английский не очень хорошо знаю. Но даже знание языка не помогло бы разобраться в этом address...


 
tesseract ©   (2006-03-07 14:59) [7]

Напоминает выход за пределы массива.


 
Плохиш ©   (2006-03-07 15:08) [8]


> Silica ©   (07.03.06 14:03) [6]

Девушка, Вы программиска или уборщица подрабатывающая программисткой? Встроенный в делфи отладчик преднозначен для поиска мест, где возникают ошибки и изучения состояния переменных в данный момент. А Вы даже не удосужились привести место кода, которое вызывает данную ошибку, хотя делфи при возникновении ошибок останавливает выполнение программы и показывает строку, являющуюся источником этой ошибки :-(
Ошибка означает, что Ваша программа попыталась обратиться к области памяти, к которой ей(программе) обращаться не разрешено.


 
Button1Click   (2006-03-09 02:22) [9]

Вот ошибки:

1. for i := 1 to n - 1 do  a[i] := i + 1;
в этой строке индекс I выходит за пределы массива array [1..4] of integer -
увеличте размер массива, например array [1..400] или используйте динамический массив.

2. Имя переменной color совпадает со свойством формы Form1.Color - измените имя переменной во всей программе.


 
Loginov Dmitry ©   (2006-03-09 08:35) [10]

Сравните:


> for i:=1 to N do  {распечатка цветов}
> if A[i]=0
> then writeln("element", " " , i, " - chernii")
> else writeln("element", " " , i, " - belii");


и


>  for i := 1 to n do{распечатка цветов}
>  if a[i] = 0 then
>    Memo1.Lines.Add("элемент" + " " + inttostr(i) + "- черный");
>
>  if a[i] = 1 then
>  begin
>    Memo1.Lines.Add("элемент" + " " + inttostr(i) + "- белый");
>
>  end;


Ничего не забыли?
Во втором случае вы используете переменную цикла за пределом самого цикла (хотя не думаю, что именно это вызывает ошибку).


 
Marser ©   (2006-03-09 23:47) [11]


> хотя делфи при возникновении ошибок останавливает выполнение
> программы и показывает строку, являющуюся источником этой
> ошибки :-(

Не всегда точно, особенно AV, что может вводить в заблуждение. Так, мне на днях заявляли, что $IFDEF вызывает оную ошибку, хотя на самом деле ошибка возникла раньше.


 
Defunct ©   (2006-03-09 23:59) [12]

> Так, мне на днях заявляли, что $IFDEF вызывает оную ошибку

забавно :)



Страницы: 1 вся ветка

Форум: "Начинающим";
Текущий архив: 2006.03.26;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.49 MB
Время: 0.045 c
2-1142245192
dabreezy
2006-03-13 13:19
2006.03.26
TstringList - глюк на глюке.


2-1141733678
oleg__
2006-03-07 15:14
2006.03.26
TImageList


3-1138357869
Ivanov Sergey
2006-01-27 13:31
2006.03.26
Что не так в запросе?


3-1138797778
Громозека
2006-02-01 15:42
2006.03.26
Компоненты ZEOS для доступа к MySQL


2-1141738650
dera
2006-03-07 16:37
2006.03.26
Как отсортировать таблицу?





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский