Показ дописів із міткою pascal. Показати всі дописи
Показ дописів із міткою pascal. Показати всі дописи

середа, 3 квітня 2013 р.

Pascal для 61 роты


Начнём использовать массивы

program Project2;
{$APPTYPE CONSOLE}
uses
  SysUtils;
 //создадим массив из 10 элем элементов
var a:array[1..10] of integer;
i:integer;

begin
  Writeln('Pishem v massiv chisla on 1 do 10');
  //пробегаем по элементам массива
  for i := 1 to 10 do
   begin
     a[i] := i;//заполняем его числами от 1 до 10
   end;

  Writeln('Vot, chto v massive:');
  //теперь выведем их на экран
  for i := 1 to 10 do
   begin
     Writeln(a[i]);//выводим элементы на экран
   end;

 Readln;//Обязательная команда, чтобы программа не закрывалась внезапно
end.

Работает? Теперь будем расширять. Новая программа будет заполнять массив случайными числами, находить их сумму, максимальное из них и минимальное



program Project2;
{$APPTYPE CONSOLE}
uses
  SysUtils;
 //создадим массив из 10 элем элементов
var a:array[1..10] of integer;
  i:integer;
  s:integer;
  mx:integer;
  mn:integer;
begin
  Writeln('Pishem v massiv sluchajnye chisla');
  //пробегаем по элементам массива
  for i := 1 to 10 do
   begin
     a[i] := random(100);//заполняем его случайными числами от 0 до 99
   end;

  Writeln('Vot, chto v massive:');
  //теперь выведем их на экран
  for i := 1 to 10 do
   begin
     Writeln(a[i]);
   end;

//ищем сумму. вначале она равна 0
  s:=0;

  for i := 1 to 10 do
   begin
     s:=s+a[i];
   end;
  Writeln('summa ravna ', s);

//Теперь ищем максимум и минимум. Вначале они оба равны первому элементу
 mx:=a[1];
 mn:=a[1];



for i := 2 to 10 do
   begin
//Если находится элемент, который больше текущего максимума текущий масимум поднимаем
      if a[i] > mx then
        mx := a[i];
//Если находится элемент, который меньше текущего минимума текущий минимум поднимаем

      if a[i] < mn then
        mn := a[i];


   end;
  Writeln('minimum raven ', mn);
  Writeln('maximum raven ', mx);



 Readln;
end.

Подумайте самостоятельно, как сделать так, чтобы эти 10 чисел не генерировал компьютер, а вводил человек.


неділя, 24 березня 2013 р.

Високосные годы

Знаете, по какому правилу определяется. является ли год високосным? Високосные годы - те, которые делятся на 4. Но есть исключения. Если номер года оканчивается на два нуля, но не делится на 400, такой год не будет високосным. Так, високосные годы 1904, 2004, 2008, 2012. Високосным были и 2000 и 1600 годы. Но годы 1700, 1800, 1900 и 2100 - не високосные. Вам нужно написать программу, которая выведет на экран числа от 1800 до 2100 и укажет, является ли год високосным. Результат должен быть таким: 1800 - не високосный 1801 - не високосный 1802 - не високосный 1803 - не високосный 1804 - високосный 1805 - не високосный 1806 - не високосный 1807 - не високосный 1808 - високосный и т.д........ Напоминаю, чтобы проверить, делится ли число a на число b, нужно найти остаток от деления a на b. Этот остаток должен быть равен нулю. B Паскале это выглядит так: if (a mod b = 0) then

понеділок, 18 березня 2013 р.

Как всё-таки решаются задачи с циклами

На позапрошлом занятии были даны 5 заданий на циклы for. К сожалению, даже второе вызвало у многих затруднения. Давайте ещё раз разберём их.

Для начала напомню общую структуру программы в Pascal

program Project1;//имя программы. Не играет роли

{$AppType CONSOLE} //Эту строку вставляет сама Делфи, показывает, что будет паскалевское приложение

uses SysUtils;//Используемые модули. Если работаем черед Делфи, ничего не меняйте

var //здесь объявляются переменные. Если в программе нет ни одной переменной, он не нужен

begin
 //Здесь будет текст собственно программы
  Readln; //Эта команда нужна, чтобы окно после завершения работы не закрывалось автоматически, а можно было увидеть результат.
end.


Напомню также структуру оператора цикла

for {переменная} := {начальное значение переменной} to {конечное значение переменной} do
   begin
     {действия, которые нужно выполнить}
   end;

Задание 1.
Написать программу, которая выведет на экран все числа от 1 до 100


Здесь всё просто (в этом и последующий примерах я буду приводить только блок var и всё, что находится между begin и end)


var i:integer;//забили в памяти ячейку для целого числа - счётчика цикла

begin
 for i := 1 to 100 do //Выполняем действие 100 раз
   begin
     Writeln(i); //А действие это - напечатать число
   end;

  Readln;

end.



Задание 2.
Написать программу, которая выведет на экран квадраты чисел от 1 до 100

Чем это задание отличается от предыдущего? Только действием. Значит и в программе надо поменять только действие:

var i:integer;//забили в памяти ячейку для целого числа - счётчика цикла

begin
 for i := 1 to 100 do
   begin
     Writeln(i*i); //Теперь будет печататься квадрат числа
   end;

  Readln;

end.

Задание 3.
Написать программу, которая выведет на экран квадраты только нечётных чисел от 1 до 100

Чем эта программа отличается от предыдущей? Тем, что перед тем, как выполнить действие, выполнится проверка на чётность. Можно исопльзовать функцию odd() а можно - деление с остатком, mod.

var i:integer;

begin
 for i := 1 to 100 do
   begin
     if odd(i) then
        Writeln(i*i); //Теперь будут печататься только нечётные квадраты
   end;

  Readln;

end.



Задание 4.
Написать программу, которая попросит у человека ввести число, а затем найдёт сумму всех чисел от 1 до введённого числа

Вот здесь было больше всего непоняток. Чем эта программа отличается от самой первой? Тем, что верхняя граница заранее не известна, а её будет водить человек.

Значит, нужна переменная, значение которой мы попросим ввести человека, а затем используем как верхнюю границу в цикле.

var i:integer;
n:integer;//вот это вторая переменная

begin
 WriteLn('Vvedite Chislo'); //Сначала объясняем человеку, что мы от него хотим
 ReadLn(n);//получаем это число от человека


 for i := 1 to n do //Выполняем действие n раз
   begin
     Writeln(i); //А действие это - напечатать число
   end;

  Readln;

end.






Задание 5.
Написать программу, которая выведет следующие 100 строк:
1 год
2 года
3 года
4 года
5 лет
6 лет
и т.д.

Давайте для начала сделаем английский аналог. 
1 year
2 years
3 years 
и т.д.

Вспомним задачу 3. Если число будет равно 1, нужнописать year, а если больше - years.

begin
 for i := 1 to 100 do
   begin
     if i=1 then
        Writeln(i, ' year')
     else       
        Writeln(i, ' years');
   end;

  Readln;

end.

А для русского языка сформулируйте условия самостоятельно и напишите аналогичную программу. 

Подскажу, как определить, заканчивается ли число на единицу. Последняя цифра числа - это его остаток от деления на 10. Поэтому русская фраза "Если число i оканчивается на единицу, то..." в Паскале будет выглядеть как:
if (i mod 10) = 1 then

середа, 27 лютого 2013 р.

Циклы в Pascal

Часто в программе требуется сделать много однотипных действий. Если число повторений известно заранее, для этого используется цикл со следующей структурой:

for {переменная} := {начальное значение переменной} to {конечное значение переменной} do
   begin
     {действия, которые нужно выполнить}
   end;

Задание 1.
Написать программу, которая выведет на экран все числа от 1 до 100

Задание 2.
Написать программу, которая выведет на экран квадраты чисел от 1 до 100

Задание 3.
Написать программу, которая выведет на экран квадраты только нечётных чисел от 1 до 100

Задание 4.
Написать программу, которая попросит у человека ввести число, а затем найдёт сумму всех чисел от 1 до введённого числа

Задание 5.
Написать программу, которая выведет следующие 100 строк:
1 год
2 года
3 года
4 года
5 лет
6 лет
и т.д.

понеділок, 18 лютого 2013 р.

Pascal: ветвление

Обычно ветвление в паскале рассматривают на примере решения уравнения вида ax2+bx+c=0.

Но  мы начнём с чего-то попроще. Пусть компьютер угадывает загаданное пользователем число от 1 до 2.

Пишем:

program ugadayka1;
{$APPTYPE CONSOLE}
uses
  SysUtils;
var
  ans    : Char;
begin
  Writeln('Zagadayte chislo ot 1 do 2. Nazhmite Enter po gotovnosti.');//сообщаем пользователю, что мы от него хотим
  Readln;//когда человек загадал число, он должен нажать Enter
  Writeln ('Eto 1? (y/n)');//спрашиваем, загадал ли он единицу.
  Readln(ans);//ответить он должен, нажав y или n на клавиатуре
  if (ans='y') or (ans='Y') then //т.к. может быть нажат Caps Lock, за ответ "да" будем считать как маленькую, так и заглавную букву y
   Writeln('Ura! Ya ugadal! Eto 1')
  else
   Writeln('Vy zagadali chislo 2');

  Readln;
end.      


Расширим теперь нашу программу - пусть человек загадывает число от 1 до 4:

program ugadayka2;
{$APPTYPE CONSOLE}
uses
  SysUtils;
var
  ans    : Char;
begin
  Writeln('Zagadayte chislo ot 1 do 4. Nazhmite Enter po gotovnosti.');
  Readln;
  Writeln ('Eto 1? (y/n)');
  Readln(ans);
  if (ans='y') or (ans='Y') then
   Writeln('Ura! Ya ugadal! Eto 1')
  else

    begin
      Writeln ('Eto 2? (y/n)');
      Readln(ans);
      if (ans='y') or (ans='Y') then
       Writeln('Ura! Ya ugadal! Eto 2')
      else

        begin
          Writeln ('Eto 3? (y/n)');        
          Readln(ans);
          if (ans='y') or (ans='Y') then
           Writeln('Ura! Ya ugadal! Eto 3')
          else

           Writeln('Vy zagadali chislo 4');
 
        end;
    end;
 
  
  Readln;
end.   



Изменим теперь программу так, чтобы ей требовалось максимум 2 вопроса, чтобы угадать число от 1 до 4:

program ugadayka3;
{$APPTYPE CONSOLE}
uses
  SysUtils;
var
  ans    : Char;
begin
  Writeln('Zagadayte chislo ot 1 do 4. Nazhmite Enter po gotovnosti.');
  Readln;

  Writeln ('Chislo chetnoe? (y/n)');//Этим вопросом мы разбиваем все возможные варианты ответа на 2 равные группы  Readln(ans);
  if (ans='y') or (ans='Y') then
   begin
      Writeln ('Eto 2? (y/n)');
      Readln(ans);

      if (ans='y') or (ans='Y') then
       Writeln('Ura! Ya ugadal! Eto 2')
      else
       Writeln('Vy zagadali chislo 4');
   end
  else
   begin
      Writeln ('Eto 1? (y/n)');
      Readln(ans);

      if (ans='y') or (ans='Y') then
       Writeln('Ura! Ya ugadal! Eto 1')
      else
       Writeln('Vy zagadali chislo 3');
   end;
  
  Readln;
end. 


Составьте в конспекте блок-схемы алгоритмов рассмотренных программ.
Составьте алгоритм и напишите программу, которая бы угадывала загаданный день недели.
Составьте алгоритм и напишите программу, которая бы угадывала загаданный месяц.

четвер, 8 грудня 2011 р.

Итоговая контрольная по Pascal


1. Объявите массив целых чисел. Установите его длину, равной 100. Заполните его чётными числами от 2 до 200.

2. Создаёте массив строк. Установите его длину, равную 50. Для всех чисел из первого массива, если они делятся на 4, преобразуйте их в строку и запишите во второй.

3. Объявите переменные a и b дробного типа. Присвойте им случайные значения. С помощью какой последовательности команд можно сделать так, чтобы значение переменной a оказалось записанным в b, а значение b - в a?

4. Почему, если объявить переменные n и i целого типа, а затем в какой-нибудь процедуре написать

for i := 95 to 959595959595 do
n := I div 10;

то программа не откомпилируется?

5. Есть 4 условия:
if m='S' then...
if M='S' then...
if M='s' then...
if m='s' then...

Могут ли какие-то из них одновременно быть истинными, и если могут, то при каких условиях?

пʼятниця, 21 жовтня 2011 р.

Контрольная по Pascal

Задания выполняются на листе, укажите фамилию и группу. В каждом задании необходимо привести фрагмент программы на Pascal, служащий указанной цели.

1. Объявите переменные a целого типа, b - дробного типа, с - типа байт, d - строкового типа, e - логического типа, f - символьного типа.

2. Есть некоторая процедура P(). Как выполнить эту процедуру 100 раз, задействовав всего 3 строки программного кода?

3. Есть 4 условия:
if A='a' then...
if A='A' then...
if a='a' then...
if a='A' then...

Какие из них всегда будут иметь одинаковое логическое значение?

4. Дана программа
n:=15;
while n>1 do
begin
if n mod 2 = 0 then
  n:=n div 2
else
  n:= 3*n+1;
  Writeln(n);
end;

Какие числа выведет эта программа на экран?

5. Какое максимальное значение может храниться в переменной типа байт?