Лабораторная работа 1: Введение в ИСР Pascal ABC

Лабораторная работа №1. Введение в интегрированную среду разработки программ «PascalABC»

Общие положения.

Цель работы – научиться основам практической разработки простейших консольных приложений (console application) в интегрированной среде «PascalABC», попрактиковаться в целочисленных операциях.

Консольным приложением называется программа, использующая в качестве основного устройства ввода-вывода консоль (консоль - это общее название для клавиатуры и дисплея ).

Интегрированная среда разработчика (ИСР) «PascalABC» представляет собой объединённый в одной оболочке программно инструментальный комплекс, предоставляющий программисту возможности по разработке, редактированию, отладке, сохранению на диске и выполнению программ, написанных на ЯП PascalABC.

Используемая нами версия языка Pascal по существу совпадает с наиболее популярными версиями этого языка (такими, как Turbo Pascal, Object Pascal и т.п.) но имеет то преимущество, что является совершенно бесплатной и может быть скачена и установлена на Ваш компьютер с официального сайта pascalabc.net

Вход в операционную систему.

1.Eсли компьютер в нерабочем состоянии, убедиться в том, что он подключён к сети и нажать кнопку питания системного блока.
2.При появлении заставки парольной защиты, ввести …
Пользователь: user
Пароль: user
Нажать клавишу Enter (если не получилось, попробовать пустой пароль)

Запуск ИСР «PascalABC», набор и выполнение программы
1.Если ИСР «PascalABC» не запущена, найти на рабочем столе ярлык PascalABC и двойным щелчком мыши (double click) запустить ИСР.
2. [После завершения загрузки ИСР] Скорее всего, Вы увидите перед собой пустое окно редактирования с мигающим курсором в левом верхнем его углу.
Если же это не так, слева вверху щёлкнуть пункт File главного меню. В выпавшем подменю выбрать подпункт New.
Последовательность этих выборов кратко может быть представлена в форме пути: «File|New». Именно такой, краткой формой изображения последовательных выборов вложенных пунктов меню, мы и будем пользоваться в дальнейшем.
Если всё было сделано правильно, на экране в любом случае должно появиться пустое окно редактирования, озаглавленное как Program1.pas.

3. [В качестве примера] Набрать текст программы сложения двух целых чисел, для чего с клавиатуры ввести следующее (номера операторов слева не проставлять!):

  1. program Summa;                 // дали  имя программе - Summa
  2.      var a, b, sum: Integer;    //описали  целые (Integer) переменные  - а, b, sum
  3. Begin
  4.    Write(‘Введите a=);         //вывод текстовой подсказки на ввод значения для а
  5.    Readln(a);                        //оператор ввода а
  6.    Write(‘Введите b=);        //вывод текстовой подсказки на ввод значения для b
  7.    Readln(b);                       //оператор ввода b
  8.    sum:=a+b;                     // вычисление и запись суммы  в переменную sum
  9.    Writeln(a,+, b,=, sum);  // вывод результата в мнемоничном, т.е. понятном человеку, виде
  10. End.

4. Запустить программу, нажав для этого клавишу F9. Внизу откроется окно вывода куда будет выведен текст из первого оператора программы ( Write(‘Введите a=’);) и, ещё ниже, в результате выполнения второго оператора программы (Readln(a);) откроется окошко с мигающим курсором для ввода значения переменной а.
5. Набрать на клавиатуре значение для а (например, 15) и нажать Enter. Появится запрос значения переменной b.
6. Набрать на клавиатуре значение для b (например, 25) и нажать Enter. Вычислится результат - сумма а+b.
Результат отобразится в окне вывода, окно ввода закроется, программа завершится и снова станет активным окно редактирования. Можно что-то в программе подправить и запустить её снова.

Сохранение программы на диске
1. Щёлкнуть в левом верхнем углу главного окна ИСР пункт меню «File|Save as…»
2. Выбрать папку d:\student\1_kurs\ваша_группа\ваша_фамилия (например, d:\student\1_kurs\1pm\ ivanov). Если такая папка отсутствует, тут же создать её.
3. В нижней части окна, вписать имя файла программы, заменив указанное там имя «Program1», например, на имя Вашей программы(Summa), указанное в её заголовке
4. Сохранить программу в своей папке, нажав для этого внизу, справа кнопку Save.
После сохранения программы можно либо выйти из ИСР (пункт меню File|Exit), либо снова снова выбрав File|New, приступить к вводу другой программы.

Открытие программы
[Если ИСР не запущена] Открыть свою папку, которая содержит файл программы и выполнить двойной щелчок на имени этого файла (оно оканчивается суффиксом .pas). Например, открыть папку d:\student\1_kurs\1pm\ivanov и выполнить двойной щелчок на содержащемся в ней файле Summa.pas.
или
[Если ИСР запущена]
1. Выбрать в главном меню пункт File|Open…;
2. В открывшемся окне выбрать папку;
3. Выбрать в папке файл программы (например, Summa.pas).

Решить следующие задачи, сохраняя все решения в своей папке:

1.Ввести два числа типа Integer и вывести их с пояснениями в обратном порядке (например, введя: 46 94, мы получим 94 46):
a)Любым способом;
b)Использовав для ввода-вывода операторы Readln(a,b) и Writeln(a,' ', b);
в) То же, что и (b), но обойдясь без дополнительных переменных.

2.Поэкспериментировать в предыдущем решении с вариантами ввода-вывода: Readln(a), Readln(b), Read(a,b), Writeln(a,b), Write(a:10,b), Write(a:2,b), Write(a,b), Writeln(a) и т.п.
Сделать выводы.

3.Ввести два числа типа Byte (в диапазоне от 0 до 255) и вычислить с выдачей текстовых пояснений частное и остаток от деления первого числа на второе.

4.Решить задачу (3) используя вместо типа данных Byte тип ShortInt (короткие целые) и поэкспериментировать, вводя числа с разными комбинациями знаков плюс и минус. Сделать вывод о том, как формируются знаки частного и остатка.

5.Ввести двузначное число типа Byte и вывести его инверсный (перевёрнутый) вариант. Например, введя 27 вывести 72.
a)Любым способом;
b)Использовав в программе только одну переменную.

6.Найти сумму цифр заданного трёхзначного целого числа.

7.Ввести два целых двузначных числа, "склеить" их, вывести результат склейки. Напр. 24,78 => 2478

8.Дано натуральное число N < 8. Вывести его как 3-значное двоичное (т.е. изображённое в 2-ичной системе счисления) число. Напр. 5 => 101, 2 => 010, 7 => 111 и т.д.

9. Решить задачу, обратную задаче (8). То есть введя двоичное (не обязательно, 3-значное) представление
числа N < 8, вывести его десятичную запись. Напр. 11 => 3.

10. Перевести заданное в 8-ричной с.с. двузначное натуральное число в 10-ю с.с.

4.941175
Your rating: Нет Average: 4.9 (17 votes)

Комментарии

Тесленко Ольга аватар

Задача 5

  1. {5.Ввести двузначное число типа Byte и вывести его инверсный (перевёрнутый) вариант. Например, введя 27 вывести 72.
  2. a)Любым способом;
  3. b)Использовав в программе только одну переменную.
  4. }
  5.  
  6. program perevertisch_b;
  7. var
  8.   a: Byte;
  9. Begin
  10.   Writeln('Vbedite chislo: ');
  11.   Readln(a);
  12.   Writeln(a mod 10, a div 10);
  13. End.

Тесленко Ольга аватар

Исправила

  1. Нашла где можно упростить, исправила задачу 5

Задача 5 - ОК.

А вот если чуть расширить условие задачи:
Ввести двузначное число и вывести квадрат его инверсного (перевёрнутого) изображения. Напр., 21 = > 144

Тесленко Ольга аватар

Решение к расширенном условию

  1. program perevertisch_kvadrat;
  2. var
  3.   a, per, kw: word;
  4. Begin
  5.   Writeln('Vbedite dvuznachnie chislo: ');
  6.   Readln(a);
  7.   per:=(((a mod 10)*10)+(a div 10));
  8.   kw:=per*per;
  9.   writeln(kw);
  10. End.

Тоже верно

Тоже верно, Оля.

Усачёва Лолита аватар

1.Ввести два числа типа

  1. 1.Ввести два числа типа Integer и вывести их с пояснениями в обратном порядке (например, введя: 46 94, мы получим 94 46):
  2. a)Любым способом;
  3. b)Использовав для ввода-вывода операторы Readln(a,b) и Writeln(a,' ', b);
  4. в) То же, что и (b), но обойдясь без дополнительных переменных.
  5.  
  6.  program day1;
  7.       var a, b, t: Integer;
  8.  begin
  9.       readln(a,b);
  10.       t:=a;
  11.       a:=b;
  12.       b:=t;
  13.       writeln(a,';',b);
  14.  end.      
  15.  
  16.  program day1;
  17.       var a, b: Integer;
  18.  begin
  19.       readln(a,b);
  20.       writeln(b:8,';',a:3);
  21.  end.    
  22.  
  23. program day1;
  24.       var a, b: Integer;
  25.  begin
  26.       readln(a,b);
  27.       a:=a+b;
  28.       b:=a-b;
  29.       a:=a-b;
  30.       writeln(a,';',b);
  31.  end.  

Усачёва Лолита аватар

3.Ввести два числа типа Byte

  1. 3.Ввести два числа типа Byte (в диапазоне от 0 до 255) и вычислить с выдачей текстовых пояснений частное и остаток от деления первого числа на второе.
  2.  
  3. program delenie;
  4.   var a,b, chast, ostat: Byte;
  5. begin
  6.   writeln('vvedite 2 chisla: ');
  7.   readln(a,b);
  8.   chast:=a div b;
  9.   ostat:= a mod b;
  10.   writeln('chastnoe = ',chast,'; ','ostatok = ',ostat);
  11. end.

Усачёва Лолита аватар

4.Решить задачу (3) используя

  1. 4.Решить задачу (3) используя вместо типа данных Byte тип ShortInt (короткие целые) и поэкспериментировать, вводя числа с разными комбинациями знаков плюс и минус. Сделать вывод о том, как формируются знаки частного и остатка.
  2.  
  3. program korotkie zeliye;
  4.   var a,b, chast, ostat: ShortInt;
  5. begin
  6.   writeln('vvedite 2 chisla: ');
  7.   readln(a,b);
  8.   chast:=a div b;
  9.   ostat:= a mod b;
  10.   writeln('chastnoe = ',chast,'; ','ostatok = ',ostat);
  11. end.

Усачёва Лолита аватар

5.Ввести двузначное число

  1. 5.Ввести двузначное число типа Byte и вывести его инверсный (перевёрнутый) вариант. Например, введя 27 вывести 72.
  2. a)Любым способом;
  3. b)Использовав в программе только одну переменную.
  4.  
  5. program inversiya;
  6.   var a: Byte;
  7. begin
  8.   writeln('vvedite chislo: ');
  9.   readln(a);
  10.   writeln(a mod 10, a div 10);
  11. end.

Усачёва Лолита аватар

6.Найти сумму цифр заданного

  1. 6.Найти сумму цифр заданного трёхзначного целого числа.
  2.  
  3. program summa cifr;
  4.   var
  5.     a, b, c, d: Integer;
  6. begin
  7.   writeln('vvedite trehznachnoe chislo: ');
  8.   readln(a);
  9.   b:=a mod 10;
  10.   c:=a mod 100 div 10;
  11.   d:=a mod 1000 div 100;
  12.   writeln(d, c, b);
  13.   writeln(d+c+b);
  14. end.

Усачёва Лолита аватар

8.Дано натуральное число N <

  1. 8.Дано натуральное число N < 8. Вывести его как 3-значное двоичное (т.е. изображённое в 2-ичной системе счисления) число. Напр. 5 => 101, 2 => 010, 7 => 111 и т.д.
  2.  
  3. program dvoichnaya_sistema;
  4.   var
  5.     N,a,b,c: Integer;
  6. begin
  7.   writeln('vvedite chislo N<8: ');
  8.   readln(N);
  9.   a:=N div 2 div 2;
  10.   b:=N div 2 mod 2;
  11.   c:=N mod 2;
  12.   writeln(a,b,c);
  13. end.

Спасибо!!!)

Спасибо!!!)

))0

))0

Номер 9 =)

  1. Program nomer9;
  2.   var a, b, N:Integer;
  3. begin
  4.   Write('Введите число для перевода ');
  5.   Readln(N);
  6.   a:= N mod 10;
  7.   N:= N div 10;
  8.   b:= N mod 10;
  9.   N:= N div 10;
  10.   a:= a*2;
  11.   b:= b*2;
  12.   if N=0 then
  13.     N:= 2
  14.     else N:= 3;
  15.   Writeln(a+b+N);
  16. end.

Фоменко Владислав аватар

Задача 7

  1. program prog7;
  2. var a,b:integer;
  3. begin
  4. Write('введите 2 двухзначных числа');
  5. readln(a,b);
  6. a:= a*100;
  7. b:= a+b;
  8. write(b);
  9. end.

#10

  1. Program nomer10;
  2.   var a, b:Integer;
  3. Begin
  4.   Write('Введите двузначное число 8-й с.с ');
  5.   Readln(a);
  6.   b:=a mod 10;
  7.   a:=a div 10;
  8.   Writeln(b+a*8);
  9. end.

Титов Влад аватар

Задача 9 на Python

  1. #номер 9 на Python. Решить задачу, обратную задаче (8). То есть введя двоичное (не обязательно, 3-значное) представление
  2. числа N < 8, вывести его десятичную запись. Напр. 11 => 3.
  3.  
  4. N=int(input("Введите число в двоичном представлении"))    #вводим число
  5. koef=1      #указываем множитель последней цифры
  6. chislo=0     #инициализируем переменную "будущего" числа
  7. while N>0:    #создаем цикл, работающий пока N>0
  8.     chislo+=N%10*koef  #добавляем в число последнюю цифру умноженную на коэффициент разряда
  9.     N=N//10      #отсекаем последнюю цифру от N
  10.     koef=koef*2 #двигаясь влево по числу N, увеличиваем коэффициент
  11. print(chislo)    #выводим число

Титов Влад аватар

Задача с сайта PythonTutor

  1. #Задача «Электронные часы» с сайта PythonTutor
  2. #Условие: Дано число n. С начала суток прошло n минут. Определите, сколько часов и минут будут показывать электронные часы в этот момент. Программа #должна вывести два числа: количество часов (от 0 до 23) и количество минут (от 0 до 59). Учтите, что число n может быть больше, чем количество #минут в сутках.
  3. #Python
  4. n=int(input("С начала суток прошло минут:"))
  5. n=n%1440
  6. hours=n//60
  7. minutes=n-(n//60*60)
  8. print( "Время", hours, "часов", minutes, "минут")

#python 3.5.2 a =

#python 3.5.2

a = int(input())
c = a % 2
a = a // 2
d = a % 2
a = a // 2
b = a % 2
print(b,d,c)

Задача с сайта Питонтьютор

  1. Задача «Парты»
  2. Условие
  3. В школе решили набрать три новых математических класса. Так как занятия по математике у них проходят в одно и то же время, было решено выделить кабинет для каждого класса и купить в них новые парты. За каждой партой может сидеть не больше двух учеников. Известно количество учащихся в каждом из трёх классов. Сколько всего нужно закупить парт чтобы их хватило на всех учеников? Программа получает на вход три натуральных числа: количество учащихся в каждом из трех классов.
  4. a=int(input())
  5. b=int(input())
  6. c=int(input())
  7. s=a//2 + b//2 + c//2
  8. p=a%2 + b%2 + c%2
  9. s=s+p
  10. print(s)

Задача с сайта Питонтьютор

  1. Задача «Шнурки»
  2. Условие
  3. Обувная фабрика собирается начать выпуск элитной модели ботинок. Дырочки для шнуровки будут расположены в два ряда, расстояние между рядами равно a, а расстояние между дырочками в ряду b. Количество дырочек в каждом ряду равно N. Шнуровка должна происходить элитным способом “наверх, по горизонтали в другой ряд, наверх, по горизонтали и т.д.(см. рисунок). Кроме того, чтобы шнурки можно было завязать элитным бантиком, длина свободного конца шнурка должна быть l. Какова должна быть длина шнурка для этих ботинок?
  4.  
  5. Программа получает на вход четыре натуральных числа a, b, l и N - именно в таком порядке - и должна вывести одно число - искомую длину шнурка.
  6. a=int(input())
  7. b=int(input())
  8. l=int(input())
  9. n=int(input())
  10. p=2*l + (2*n - 1)*a + 2*(n - 1)*b
  11. print(p)

Задача "Электронные часы" с сайта "Питонтьютор"

Условие:

Дано число n. С начала суток прошло n минут. Определите, сколько часов и минут будут показывать электронные часы в этот момент. Программа должна вывести два числа: количество часов (от 0 до 23) и количество минут (от 0 до 59). Учтите, что число n может быть больше, чем количество минут в сутках.

Решение:

  1. n = int(input())
  2. x = ( ( n // 60 ) // 24 ) * 24
  3. print(((n // 60) - x), n - (n // 60) * 60)

Задача «Шнурки» с сайта "Питонтьютор"

Условие:

Обувная фабрика собирается начать выпуск элитной модели ботинок. Дырочки для шнуровки будут расположены в два ряда, расстояние между рядами равно a, а расстояние между дырочками в ряду b. Количество дырочек в каждом ряду равно N. Шнуровка должна происходить элитным способом “наверх, по горизонтали в другой ряд, наверх, по горизонтали и т.д.” (см. рисунок). Кроме того, чтобы шнурки можно было завязать элитным бантиком, длина свободного конца шнурка должна быть l. Какова должна быть длина шнурка для этих ботинок?

Программа получает на вход четыре натуральных числа a, b, l и N - именно в таком порядке - и должна вывести одно число - искомую длину шнурка.

Решение:

  1. a = int(input())
  2. b = int(input())
  3. l = int(input())
  4. n = int(input())
  5.  
  6. n = n * 2
  7. l = l * 2
  8.  
  9. sum = (a * (n-1)) + (b * (n-2)) + l
  10.  
  11. print(sum)

Задача «Парты» с сайта "Питонтьютор"

Условие:

В школе решили набрать три новых математических класса. Так как занятия по математике у них проходят в одно и то же время, было решено выделить кабинет для каждого класса и купить в них новые парты. За каждой партой может сидеть не больше двух учеников. Известно количество учащихся в каждом из трёх классов. Сколько всего нужно закупить парт чтобы их хватило на всех учеников? Программа получает на вход три натуральных числа: количество учащихся в каждом из трех классов.

Решение:

  1. a = int(input())
  2. b = int(input())
  3. c = int(input())
  4. x = a % 2
  5. a = (a // 2) + x
  6. x = b % 2
  7. b = (b // 2) + x
  8. x = c % 2
  9. c = (c // 2) + x
  10. print(a + b + c)

ВНИМАНИЕ!!!

Начнём, наш полуночный бонус-тест, как договаривались, в 22:00. Материалы теста будут размещены в рубрике СТАТЬИ в самой верхней позиции. Там же, в виде комментариев к этим материалам, я жду и ваши решения.

Условия бонус-теста:
1) Запрещено использование тех языковых средств, которые нами ещё не рассматривались на лабораторных занятиях (условия, циклы, специальные функции и т.п.);
2) Оцениваются только те решения, которые не дублируют уже приведённые кем-то (но по одной задаче может быть предложено несколько способов её решения).
3) Обсуждать, улучшать или находить ошибки в чужих решениях можно без ограничений – это тоже даёт бонусы, при этом, возможно, даже большие, чем само решение.
4) До 24:00 каждому участнику разрешено представить правильное решение не более, чем одной задачи (чтобы могло попробовать себя большее число людей). При нарушении этого условия, все баллы участника аннулируются и он исключается из числа участников теста.
5) Любое решение обязательно должно предваряться номером и условием задачи, выполненным в форме включённого в код комментария.
6) Принимается к рассмотрению только правильно выделенный тегами (“красивый”) код, выполненный с необходимыми отступами и содержащий ключевые комментарии.

Тесленко Ольга аватар

К.р. 1пм/2 19.09.19 задача 1(b)

Валерий Шахамболетович, я запуталась в задаче 1b и заведомо знаю, что написала её не правильно, пока добиралась домой поняла задачу и придумала решение, проверьте пожалуйста:

Даны 2 натуральных числа х и y:
b) вывести 0, если они равны и 1, если нет.

  1. program zd_1_b;
  2.   var x, y, rez: integer;
  3. begin
  4.   readln(x,y);
  5.   x:=x+1; y:=y+1;
  6.   rez:=(x div y)-(y div x);
  7.   rez:=rez*rez;
  8.   writeln(rez);
  9. end.

Оля

Наполовину. Гарантированно верно только в случае равенства.

Тесленко Ольга аватар

Ошиблась с файлом, скинула не то решение

Я не то решение скинула, я точно помню что оно работало при любых значениях, вот оно:

  1. program zd_1_b;
  2.   var a,b,x, y, rez: integer;
  3. begin
  4.   readln(x,y);
  5.   x:=x+1; y:=y+1;
  6.   rez:=(x div y)*(y div x);
  7.   rez:=rez-1;
  8.   rez:=rez*rez;
  9.   writeln(rez);
  10. end.

ОК, Оля.

Но можно ещё короче!

Наверное вот так вот ?

Наверное вот так вот ? =)

  1. program zd_1_b;
  2.   var a,b,x, y, rez: integer;
  3. begin
  4.   readln(x,y);
  5.   x:=x+1; y:=y+1;
  6.   rez:=(x div y)*(y div x);
  7.   rez:=rez-1;
  8.   writeln(rez*rez);
  9. end.