Форум: "Начинающим";
Текущий архив: 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