Автор Тема: Pascal\Delphi FAQ  (Прочитано 11890 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн InfStudent

  • Модератор
  • *****
  • Сообщений: 1356
  • Куба любовь моя))
    • Просмотр профиля
Pascal\Delphi FAQ
« : 11 Декабря 2009, 01:30:44 »
1. Hello World!: как сделать так чтобы можно было успеть прочесть вывод
programm HelloWorld;
uses SysUtils;
begin
writeln('Hello World!');
readln;
end;
Продолжение следует....
Прежде чем задавать вопрос в раздел по программированию повтори теорию и посмотри FAQ! Просьба не кидайте задания в ЛС и не надо мне писать: "посмотри мою задачу!!!" Я смотрю все задачи в разделе когда на форуме
Учтите что подобные ЛС будут оставлены без внимания!
УКАЗЫВАЙТЕ ЯЗЫК ПРОГРАММИРОВАНИЯ НА КОТОРОМ ДОЛЖНА БЫТЬ РЕШЕНА ЗАДАЧА
Вам в помощь:
∫ ¼ ½ ¾ ⅓ ⅔ ⅛ ⅜ ⅝ ⅞ ² ³ ± ~ ‰ ∞ √ ∑ ∆ ℮ ∩ ≡ ≤ ≥ ≈ ∩

Оффлайн Данила

  • Глобальный модератор
  • *****
  • Сообщений: 1657
  • Математик-экстрасенс
    • Просмотр профиля
Re: Pascal\Delphi FAQ
« Ответ #1 : 11 Декабря 2009, 14:35:21 »
Циклы организуются с помощью оператора for

var i,result:integer;
begin
result:=0;  {обнуляем переменную}
for i:=1 to 10 do
inc(result); {оператор инк эквивалентен записи вида a:=a+1}
end.

После выполнения программы result стал равен 10
Просьба не кидать мне в ЛС Ваши задания...создаем тему,пишем свое задание,наработки\идеи...полностью и нахаляву ничего не решаю

Вам в помощь:
∫ ¼ ½ ¾ ⅓ ⅔ ⅛ ⅜ ⅝ ⅞ ² ³ ± ~ ‰ ∞ √ ∑ ∆ ℮ ∩ ≡ ≤ ≥ ≈ ∩

Оффлайн InfStudent

  • Модератор
  • *****
  • Сообщений: 1356
  • Куба любовь моя))
    • Просмотр профиля
Re: Pascal\Delphi FAQ
« Ответ #2 : 11 Декабря 2009, 18:10:53 »
Так же циклы можно организовать при помощи  оператора while.

var
i,result:integer;
begin
result:=0;
writeln('Vvedi nomer chlena progressii');
while i<=n do
begin
result:=result+1;
inc(i);
end;

readln;
end;
Отличие между этими циклами в том что while применяются тогда когда неизвестно заранее число итераций(число раз выполнения цмкла), а цикл for когда число итераций фиксировано. Так же цикл while очень удобен и это фактически единственный вариант, когда нужно использовать пррывание по логическому флагу  
« Последнее редактирование: 12 Декабря 2009, 00:23:06 от Asix »
Прежде чем задавать вопрос в раздел по программированию повтори теорию и посмотри FAQ! Просьба не кидайте задания в ЛС и не надо мне писать: "посмотри мою задачу!!!" Я смотрю все задачи в разделе когда на форуме
Учтите что подобные ЛС будут оставлены без внимания!
УКАЗЫВАЙТЕ ЯЗЫК ПРОГРАММИРОВАНИЯ НА КОТОРОМ ДОЛЖНА БЫТЬ РЕШЕНА ЗАДАЧА
Вам в помощь:
∫ ¼ ½ ¾ ⅓ ⅔ ⅛ ⅜ ⅝ ⅞ ² ³ ± ~ ‰ ∞ √ ∑ ∆ ℮ ∩ ≡ ≤ ≥ ≈ ∩

Оффлайн InfStudent

  • Модератор
  • *****
  • Сообщений: 1356
  • Куба любовь моя))
    • Просмотр профиля
Re: Pascal\Delphi FAQ
« Ответ #3 : 11 Декабря 2009, 18:32:18 »
Тонкость с циклом for:
переменная которая используется как счетчик цикла не должна меняться внутри цикла. То есть такой код вызовет ошибку, компиляция не пройдет:
...
for i:=1 to 10 do
begin
writeln(i);
inc(i);
end;
...
Прежде чем задавать вопрос в раздел по программированию повтори теорию и посмотри FAQ! Просьба не кидайте задания в ЛС и не надо мне писать: "посмотри мою задачу!!!" Я смотрю все задачи в разделе когда на форуме
Учтите что подобные ЛС будут оставлены без внимания!
УКАЗЫВАЙТЕ ЯЗЫК ПРОГРАММИРОВАНИЯ НА КОТОРОМ ДОЛЖНА БЫТЬ РЕШЕНА ЗАДАЧА
Вам в помощь:
∫ ¼ ½ ¾ ⅓ ⅔ ⅛ ⅜ ⅝ ⅞ ² ³ ± ~ ‰ ∞ √ ∑ ∆ ℮ ∩ ≡ ≤ ≥ ≈ ∩

Оффлайн InfStudent

  • Модератор
  • *****
  • Сообщений: 1356
  • Куба любовь моя))
    • Просмотр профиля
Re: Pascal\Delphi FAQ
« Ответ #4 : 11 Декабря 2009, 20:41:46 »
Пример работы с массивом:
var
arr:array[1..10] of integer;
i:integer;
begin
randomize\\даем начальное число для генерации серии случайных \\чисел
for i:=1 to 10 do\\при помощи цикла пробегаем весь массив
begin
arr:=random(10);\\заполняем  случайными значениями от  0 и до 10
end;
for i:=1 to 10 do\\при помощи цикла пробегаем весь массив
begin
writeln(arr);\\выводим массив
end;
 
end;
Прежде чем задавать вопрос в раздел по программированию повтори теорию и посмотри FAQ! Просьба не кидайте задания в ЛС и не надо мне писать: "посмотри мою задачу!!!" Я смотрю все задачи в разделе когда на форуме
Учтите что подобные ЛС будут оставлены без внимания!
УКАЗЫВАЙТЕ ЯЗЫК ПРОГРАММИРОВАНИЯ НА КОТОРОМ ДОЛЖНА БЫТЬ РЕШЕНА ЗАДАЧА
Вам в помощь:
∫ ¼ ½ ¾ ⅓ ⅔ ⅛ ⅜ ⅝ ⅞ ² ³ ± ~ ‰ ∞ √ ∑ ∆ ℮ ∩ ≡ ≤ ≥ ≈ ∩

Оффлайн InfStudent

  • Модератор
  • *****
  • Сообщений: 1356
  • Куба любовь моя))
    • Просмотр профиля
Re: Pascal\Delphi FAQ
« Ответ #5 : 12 Декабря 2009, 01:17:09 »
Динамический массив:
его главное отличие от фиксированных в том, что он создается в оперативной памяти и его размер меняется динамически.
пример программы, заполняющей дин массив 10 значениями и выводящей этот массив на экран:
program Project2;

{$APPTYPE CONSOLE}

uses
  SysUtils;

   var
   testvar:Array of integer ;
   i:integer;
begin
randomize;
writeln('Vvedite razmer massiva'); //указываем размер массива
readln(i);
setlength(testvar,i);//устанавливаем размер массива
for i :=0  to length(testvar)-1 do //из-за того что отсчет индексов идет с нуля
//отнимаем единицу от его длины, чтобы не было выхода за границы массива
begin
testvar:=random(10);
end;
for i :=0  to length(testvar)-1 do //выводим массив
begin
write(testvar,' ');
end;

readln;
end.
 
« Последнее редактирование: 12 Декабря 2009, 14:18:39 от InfStudent »
Прежде чем задавать вопрос в раздел по программированию повтори теорию и посмотри FAQ! Просьба не кидайте задания в ЛС и не надо мне писать: "посмотри мою задачу!!!" Я смотрю все задачи в разделе когда на форуме
Учтите что подобные ЛС будут оставлены без внимания!
УКАЗЫВАЙТЕ ЯЗЫК ПРОГРАММИРОВАНИЯ НА КОТОРОМ ДОЛЖНА БЫТЬ РЕШЕНА ЗАДАЧА
Вам в помощь:
∫ ¼ ½ ¾ ⅓ ⅔ ⅛ ⅜ ⅝ ⅞ ² ³ ± ~ ‰ ∞ √ ∑ ∆ ℮ ∩ ≡ ≤ ≥ ≈ ∩

Оффлайн InfStudent

  • Модератор
  • *****
  • Сообщений: 1356
  • Куба любовь моя))
    • Просмотр профиля
Re: Pascal\Delphi FAQ
« Ответ #6 : 12 Декабря 2009, 14:06:39 »
Замечание об объявлениях массивов и переменных других типов. ВЫ можете использовать следующую конструкцию
type
MyArr=array[1..10] of integer;
Пример:
program Project2;

{$APPTYPE CONSOLE}

uses
  SysUtils;
  type
  MyArr=array[1..10] of integer;//описываем новый тип

   var
   testvar:MyArr;//объявляем новую переменную
   i:integer;
begin
for i :=1  to 10 do//записываем 10 значений в массив с клавиатуры
begin
readln(testvar);
end;
end.
« Последнее редактирование: 13 Декабря 2009, 14:33:46 от InfStudent »
Прежде чем задавать вопрос в раздел по программированию повтори теорию и посмотри FAQ! Просьба не кидайте задания в ЛС и не надо мне писать: "посмотри мою задачу!!!" Я смотрю все задачи в разделе когда на форуме
Учтите что подобные ЛС будут оставлены без внимания!
УКАЗЫВАЙТЕ ЯЗЫК ПРОГРАММИРОВАНИЯ НА КОТОРОМ ДОЛЖНА БЫТЬ РЕШЕНА ЗАДАЧА
Вам в помощь:
∫ ¼ ½ ¾ ⅓ ⅔ ⅛ ⅜ ⅝ ⅞ ² ³ ± ~ ‰ ∞ √ ∑ ∆ ℮ ∩ ≡ ≤ ≥ ≈ ∩

Оффлайн InfStudent

  • Модератор
  • *****
  • Сообщений: 1356
  • Куба любовь моя))
    • Просмотр профиля
Re: Pascal\Delphi FAQ
« Ответ #7 : 13 Декабря 2009, 14:51:19 »
Рассмотрим некоторые стандартные операции с массивами:
1. Поиск заданного элемента
Допустим нам надо найти элементы которые больше 10 и вывести эти элементы на экран
Нам нужно в цикле проверить каждый элемент на соответствие условию поиска и в случае успешности проверки выполнить действия, которые мы должны сделать в случае нахождения данного элемента
ПРИМЕР:
program Project2;

{$APPTYPE CONSOLE}

uses
  SysUtils;
var
arr: array[1..10] of integer;
i:integer;
begin
for I := 1 to 10 do//заполняем массив случайными числами
begin
arr:=random(20);
end;

for I := 1 to 10 do//вывод массива для визуального контроля
//правильности работы программы
begin
write(arr,' ');
end;
writeln;
for I := 1 to 10 do \\производим поиск и вывод результата
begin
if arr>10 then
 begin
 write(arr,' ');
 end;
end;
  readln;
end.
 
Прежде чем задавать вопрос в раздел по программированию повтори теорию и посмотри FAQ! Просьба не кидайте задания в ЛС и не надо мне писать: "посмотри мою задачу!!!" Я смотрю все задачи в разделе когда на форуме
Учтите что подобные ЛС будут оставлены без внимания!
УКАЗЫВАЙТЕ ЯЗЫК ПРОГРАММИРОВАНИЯ НА КОТОРОМ ДОЛЖНА БЫТЬ РЕШЕНА ЗАДАЧА
Вам в помощь:
∫ ¼ ½ ¾ ⅓ ⅔ ⅛ ⅜ ⅝ ⅞ ² ³ ± ~ ‰ ∞ √ ∑ ∆ ℮ ∩ ≡ ≤ ≥ ≈ ∩

Оффлайн Данила

  • Глобальный модератор
  • *****
  • Сообщений: 1657
  • Математик-экстрасенс
    • Просмотр профиля
Re: Pascal\Delphi FAQ
« Ответ #8 : 14 Декабря 2009, 21:00:17 »
Удаление элемента из массива

var arr: array [1..100] of integer;
i,n,del:integer; // i - итератор,n - число элементов массива,вводимое пользователем, del - индекс удаляемого элемента
begin

write ("Введите число элементов массива ");
readln(n);

for i:=1 to n do begin
write ("a[",i,"]= "); //пользователь заполняет массив нужными данными
readln (arr[ i ]);
end;

writeln ("Введите индекс элемента,который хотите удалить");
readln(del)

for i:=del to n-1 do begin //смещаем все элементы массива на одну позицию назад,начиная с удаляемого элемента
arr[ i ]:= arr[ i+1 ];
end;
n:=n-1; //уменьшаем число элемнтов на 1

for i:=1 to n do begin //просмотрим результаты работы
writeln ("a[",i,"]= ",arr [ i ]);
end;



Для динамических массивов аналогично,только меняем число элементов с помощью SetLength (arr,n-1);
Просьба не кидать мне в ЛС Ваши задания...создаем тему,пишем свое задание,наработки\идеи...полностью и нахаляву ничего не решаю

Вам в помощь:
∫ ¼ ½ ¾ ⅓ ⅔ ⅛ ⅜ ⅝ ⅞ ² ³ ± ~ ‰ ∞ √ ∑ ∆ ℮ ∩ ≡ ≤ ≥ ≈ ∩

Оффлайн InfStudent

  • Модератор
  • *****
  • Сообщений: 1356
  • Куба любовь моя))
    • Просмотр профиля
Re: Pascal\Delphi FAQ
« Ответ #9 : 08 Января 2010, 21:28:18 »
Операции со строками:
0) Объявление строки:str:string;   
1) выясняем длину: length(str); 
2) Конкатенация(объединение): str:=str+str1;
3) сравнение str=str1.
4) преобразование кода в символ chr(k); где k переменная типа integer допустимые значения k все числовые коды определенные в таблице ASCII
Прежде чем задавать вопрос в раздел по программированию повтори теорию и посмотри FAQ! Просьба не кидайте задания в ЛС и не надо мне писать: "посмотри мою задачу!!!" Я смотрю все задачи в разделе когда на форуме
Учтите что подобные ЛС будут оставлены без внимания!
УКАЗЫВАЙТЕ ЯЗЫК ПРОГРАММИРОВАНИЯ НА КОТОРОМ ДОЛЖНА БЫТЬ РЕШЕНА ЗАДАЧА
Вам в помощь:
∫ ¼ ½ ¾ ⅓ ⅔ ⅛ ⅜ ⅝ ⅞ ² ³ ± ~ ‰ ∞ √ ∑ ∆ ℮ ∩ ≡ ≤ ≥ ≈ ∩

Оффлайн Данила

  • Глобальный модератор
  • *****
  • Сообщений: 1657
  • Математик-экстрасенс
    • Просмотр профиля
Re: Pascal\Delphi FAQ
« Ответ #10 : 17 Февраля 2010, 17:31:21 »
Процедуры и функции

Различие заключается в том,что процедура,в отличие от функции не должна ничего возвращать.

Пример.
Пусть у нас есть массив из 10 элементов. Напишем функцию,которая выводит сумму всех отрицательных элементов,и процедуру,которая будет заменять все положительные элементы на нули.

var i,summ:integer;
arr: array [0..9] of integer;

procedure ChangeArr (arr:array of integer); {передаем в процедуру массив,который будем изменять}
begin
for i:=0 to 9 do begin
   if a>0 then a:=0;
   end;
end;  {как видите,мы ничего не выводим на экран.}

function SummNegative (arr: array of integer) : integer; {здесь мы как и в процедуре передаем массив,НО после списка передаваемых параметров ,необходимо указать тип данных,которые функция будет возвращать.В нашем случае массив целочисленный,следовательно и возвращать будем целочисленный тип.}
begin
for i:=0 to 9 do begin
    if a<0 then summ:=summ+a;
   end;
   SummNegative := summ;{в этой строке как раз показано возвращение значения функцией}
end;  

begin
{заполняете массив}
ChangeArr (arr:array of integer); {вызов процедуры}
summ:=SummNegative (arr: array of integer); {вызов функции}
end.

« Последнее редактирование: 19 Февраля 2010, 16:43:02 от InfStudent »
Просьба не кидать мне в ЛС Ваши задания...создаем тему,пишем свое задание,наработки\идеи...полностью и нахаляву ничего не решаю

Вам в помощь:
∫ ¼ ½ ¾ ⅓ ⅔ ⅛ ⅜ ⅝ ⅞ ² ³ ± ~ ‰ ∞ √ ∑ ∆ ℮ ∩ ≡ ≤ ≥ ≈ ∩

Оффлайн InfStudent

  • Модератор
  • *****
  • Сообщений: 1356
  • Куба любовь моя))
    • Просмотр профиля
Re: Pascal\Delphi FAQ
« Ответ #11 : 21 Февраля 2010, 18:49:49 »
Важный момент в отношении функций:
...
function IsSimp(i:integer):boolean;
var
j:inrteger//мы можем объявлять локальные переменные внутри ппроцедур\функций
begin
for j:=2 to i-1 do
begin
if i mod 2=0 then
begin
IsSimp:=false;//ФУНКЦИЯ ПРОДОЛЖАЕТ РАБОТАТЬ И МЫ В НЕЙ! 
end
else
begin
IsSimp:=true;//ФУНКЦИЯ ПРОДОЛЖАЕТ РАБОТАТЬ И МЫ В НЕЙ!
end;
end;
end; 
Мораль сей басни такова: результат функции определяется, когда мы
доходим до end последним оператором присвоения вида: имя_функции:=результат. Но сам оператор присвоения работы функции не прекращает. Поэтому эта функция будет всегда с ошибкой. Как написать ее правильно? Применим операцию exit, приводящую к досрочному выходу из функции
function IsSimp(i:integer):boolean;
var
j:inrteger//мы можем объявлять локальные переменные внутри ппроцедур\функций
begin
for j:=2 to i-1 do
begin
if i mod 2=0 then
begin
IsSimp:=false;//ФУНКЦИЯ ПРОДОЛЖАЕТ РАБОТАТЬ И МЫ В НЕЙ! 
exit;//завершаем работу функции, ее результатом гарантировано
//станет false   
end
else
begin
IsSimp:=true;//ФУНКЦИЯ ПРОДОЛЖАЕТ РАБОТАТЬ И МЫ В НЕЙ!
end;
end;
end;         
Прежде чем задавать вопрос в раздел по программированию повтори теорию и посмотри FAQ! Просьба не кидайте задания в ЛС и не надо мне писать: "посмотри мою задачу!!!" Я смотрю все задачи в разделе когда на форуме
Учтите что подобные ЛС будут оставлены без внимания!
УКАЗЫВАЙТЕ ЯЗЫК ПРОГРАММИРОВАНИЯ НА КОТОРОМ ДОЛЖНА БЫТЬ РЕШЕНА ЗАДАЧА
Вам в помощь:
∫ ¼ ½ ¾ ⅓ ⅔ ⅛ ⅜ ⅝ ⅞ ² ³ ± ~ ‰ ∞ √ ∑ ∆ ℮ ∩ ≡ ≤ ≥ ≈ ∩

Оффлайн binarymaster

  • Старожил
  • ****
  • Сообщений: 387
  • ЗАО "Stas'M Corp."
    • Просмотр профиля
Re: Pascal\Delphi FAQ
« Ответ #12 : 25 Февраля 2010, 00:07:51 »
1. Hello World!: как сделать так чтобы можно было успеть прочесть вывод
programm HelloWorld;
uses SysUtils;
begin
writeln('Hello World!');
readln;
end;
Продолжение следует....

Я для этого использую команду sleep(ms); //ms - пауза в миллисекундах

 

Помогите в составлении программы на Turbo Pascal,плиз!срочно!

Автор Ymni4ka

Ответов: 1
Просмотров: 5965
Последний ответ 03 Ноября 2010, 09:27:22
от testtest
Помогите составить блок-схему и программы на языке Pascal

Автор tasha1991

Ответов: 0
Просмотров: 6576
Последний ответ 09 Января 2011, 16:33:00
от tasha1991
Pascal. Вычислить значения  du/dx, пользуясь конечно-разностным соотношением

Автор Shurara

Ответов: 0
Просмотров: 6419
Последний ответ 09 Февраля 2011, 17:54:21
от Shurara
Pascal. Решить задачу Коши для ОДУ модифицированным методом Эйлера

Автор Shurara

Ответов: 1
Просмотров: 7846
Последний ответ 10 Марта 2011, 16:39:51
от lyamec
Pascal FAQ. Напишите примеры использования процедур и функций

Автор privatnebank

Ответов: 3
Просмотров: 6010
Последний ответ 19 Февраля 2010, 16:29:25
от InfStudent