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

Code(R)
Сообщения: 2
Зарегистрирован: 22 янв 2007, 13:27

Пишу программы на Turbo Pascal, Delphi.
Быстро, недорого и качественно. Хороший стиль программировния (отступы, комментарии и т.п.). Если вам нужно, могу прокомментировать каждую строчку программы (и вам не нужно будет мучиться, отвечая на вопрос преподавателя - что означает этот оператор?).

Пишите мне на al@liceum.secna.ru.
Tre
Сообщения: 27
Зарегистрирован: 07 янв 2007, 23:26

Хотите решить для интереса одну задачку? Эту задачу я не смог решить на экзамене, а в последствии оказалось, что и сам преподаватель не смог решить ее! Ну кому интересно, можете посмотреть, только скажите,когда что-нибудь получится. Так вот: в Delphi без объявления глобальных переменных нужно вычислить сумму двух элементов с помощью обычной процедуры. Вот код:


procedure sum( :integer);
var :integer;
begin
c:=a+b;
end;
procedure TForm1.Button1Click (Sender: TOBject);
var a,b,c:integer;
begin
a:=10;
b:=11;
sum();
edit1.text:=inttostr(c);
end;
В скобках вы должны объявить переменные, какие надо, и если необходимо, что-то изменить. Существенных изменений не должно быть. Повторяю, без глобальных переменных! Используя только локальные переменные
Tre
Сообщения: 27
Зарегистрирован: 07 янв 2007, 23:26

somewhere писал(а):Немного переделанная версия
Кстати, спасибо Вам всем за предоставленную мне помощь! Особенно Somewhere. Ты сумел заложить хотя бы какое-то представление о Delphi. И я все-таки смог сегодня сдать этот экзамен. Причем на 5. А все потому, что я идеально смог ему сдать задачу, которую я без твоей помощи и не сделал бы. Все в твоих программах было доступно и понятно, поэтому было бы странно сдать экзамен плохо. Спасибо
Хыиуду
Сообщения: 2442
Зарегистрирован: 06 мар 2005, 21:03
Откуда: Москва
Контактная информация:

че-то я не понял условие задачи... Если написать просто
procedure sum(a,b:integer;var c:integer);
никакого использования глобальных переменных не будет. Переменные a,b,c объявлены внутри процедуры Button1Click, следовательно, локальные
Искусство программирования - заставить компьютер делать все то, что вам делать лень.
Для "спасибо" есть кнопка "Спасибо" в виде звездочки внизу под ником автора поста.
Tre
Сообщения: 27
Зарегистрирован: 07 янв 2007, 23:26

Хыиуду писал(а):че-то я не понял условие задачи... Если написать просто
procedure sum(a,b:integer;var c:integer);
никакого использования глобальных переменных не будет. Переменные a,b,c объявлены внутри процедуры Button1Click, следовательно, локальные
А ты пробовал это реализовать? Не все так просто! Если ты напишешь прогу так как ты думаешь, ничего не получится! выведет ответ либо "0", либо очень-очень большую цифру, точно не равную правильному ответу, как в том алгоритме, это 21
Хыиуду
Сообщения: 2442
Зарегистрирован: 06 мар 2005, 21:03
Откуда: Москва
Контактная информация:

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

procedure sum(a,b:integer;var c:integer);
begin
c:=a+b;
end;
var a,b,c:integer;
begin
a:=10;
b:=11;
sum(a,b,c);
writeln(c);
end.
Выводит 21. В чем вопрос-то?
В Дельфи то же самое

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

procedure sum(a,b:integer;var c:integer);
begin c:=a+b; end;

procedure TForm1.Button1Click(Sender: TObject);
var a,b,c:integer;
begin
  a:=10;
  b:=12;
  sum(a,b,c);
  Button1.Caption:=inttostr(c);
end;
Искусство программирования - заставить компьютер делать все то, что вам делать лень.
Для "спасибо" есть кнопка "Спасибо" в виде звездочки внизу под ником автора поста.
Tre
Сообщения: 27
Зарегистрирован: 07 янв 2007, 23:26

Хыиуду писал(а): В Дельфи то же самое

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

procedure sum(a,b:integer;var c:integer);
begin c:=a+b; end;

procedure TForm1.Button1Click(Sender: TObject);
var a,b,c:integer;
begin
  a:=10;
  b:=12;
  sum(a,b,c);
  Button1.Caption:=inttostr(c);
end;
а он мне втирал, что процедуре Sum " var c:integer " надо писать не в скобках, а как локальная переменная в этой процедуре
То есть procedure sum(a,b:integer);
var c:integer;
begin
c:=a+b;
end;

procedure TForm1.Button1Click(Sender: TObject);
var a,b,c:integer;
begin
a:=10;
b:=12;
sum(a,b);
Button1.Caption:=inttostr(c);
end;

Все разъяснил, завтра я над ним поиздеваюсь
Хыиуду
Сообщения: 2442
Зарегистрирован: 06 мар 2005, 21:03
Откуда: Москва
Контактная информация:

То, что он тебе объяснил, действует так:
Создаем три целых переменных (a,b,c);
в a,b записываем значения 10 и 11. с остается неинициализированной. То есть какая-то ячейка памяти, в которой до начала работы программы находился скорее всего ноль, но возможно какие-то абсолютно левые данные, относящиеся к другой программе, которая уже завершена, а следы в памяти оставила.
После этого вызывается процедура sum. Внутри нее есть переменная c - но она никак не связана с той переменной с, которая определена внутри Button1Click. То есть с точки зрения программиста она носит то же название, но с точки зрения компилятора - это две совершенно разных переменных, находящихся в разных местах памяти.
Потом выполняется с:=а+в. В переменную с, которая определена внутри процедуры sum, записывается 21.
После этого процедура sum завершается. Значение "21" остается мирно лежать там, где раньше находилась процедурная переменная. Только где она лежала, после окончания процедуры уже никто не узнает.
А теперь мы кнопке в качестве названия передаем значение переменной с - той самой, которая определена в Button1Click. Которую не изменяли с момента начала программы и в которой по прежнему лежит либо ноль, что скорее всего, либо всякий космический мусор.
Искусство программирования - заставить компьютер делать все то, что вам делать лень.
Для "спасибо" есть кнопка "Спасибо" в виде звездочки внизу под ником автора поста.
Tre
Сообщения: 27
Зарегистрирован: 07 янв 2007, 23:26

Хыиуду писал(а):То, что он тебе объяснил, действует так:
Создаем три целых переменных (a,b,c);
в a,b записываем значения 10 и 11. с остается неинициализированной. То есть какая-то ячейка памяти, в которой до начала работы программы находился скорее всего ноль, но возможно какие-то абсолютно левые данные, относящиеся к другой программе, которая уже завершена, а следы в памяти оставила.
После этого вызывается процедура sum. Внутри нее есть переменная c - но она никак не связана с той переменной с, которая определена внутри Button1Click. То есть с точки зрения программиста она носит то же название, но с точки зрения компилятора - это две совершенно разных переменных, находящихся в разных местах памяти.
Потом выполняется с:=а+в. В переменную с, которая определена внутри процедуры sum, записывается 21.
После этого процедура sum завершается. Значение "21" остается мирно лежать там, где раньше находилась процедурная переменная. Только где она лежала, после окончания процедуры уже никто не узнает.
А теперь мы кнопке в качестве названия передаем значение переменной с - той самой, которая определена в Button1Click. Которую не изменяли с момента начала программы и в которой по прежнему лежит либо ноль, что скорее всего, либо всякий космический мусор.
Ага, вот оно что! Спасибо за разъяснение!
Аватара пользователя
Oleg_Rus
Сообщения: 335
Зарегистрирован: 16 окт 2006, 09:56
Откуда: г.Улан-Удэ, респ.Бурятия, Российская Федерация
Контактная информация:

1) второй массив
for i:=1 to n do
for j:=1 to n do
if i<j then a[i, j]:=Random(53)-17 else
if i+j>n+1 then a[i, j]:=Random(900)+100;
2) третий массив
for i:=1 to n do
for j:=1 to n do
if i+j=n+1 then a[i, j]:=5;
if i+j<n+1 then a[i, j]:=n-i;

Хотя насчет третьего не уверен, но идея примерно такая:
саму побочную диагональ забиваем 5, а последующие n-i.

Должно работать!
Если увидите какие недоработки или ошибки, прошу известить!
e-mail: garmayev@yandex.ru
---------------------------------------------------------------------------
<a href="http://nick-name.ru/sertificates/711965/"><img src="http://nick-name.ru/img.php?nick=Garmay ... =2&text=t5" alt="Никнейм Garmayev зарегистрирован!" /></a>
Ответить