Pascalabc.NET. Простейшие Новые Возможности

Pascalabc.NET. Простейшие Новые Возможности

PascalABC.NET Простейшие новые возможности • Описание переменных • Множественное присваивание • Ввод – вывод • Циклы for и loop • Расширенные операторы присваивания • Тип BigInteger Обновлено 19.01.18 Оглавление • Слайд 3. Описание переменных • Слайд 4. Множественное присваивание • Слайд 5. Вывод • Слайд 6. Ввод • Слайд 7. Цикл loop • Слайд 8. Цикл for • Слайд 9. Расширенные операторы присваивания • Слайд 10. Возведение в степень • Слайд 11. Тип BigInteger • Слайд 12. Самое важное Презентация «PascalABC.NET. Простейшие новые возможности» Слайд 2 К оглавлению Описание переменных • Переменные обычно описываются в блоке begin – end • При описании переменную можно инициализировать выражением • Если при описании переменную инициализировать выражением, то тип можно не писать – он автоматически выводится по типу выражения Код var x: real; // В PascalABC.NET глобальные переменные описываются редко begin var a1: integer; var a2: integer := 5; var a3 := 555; // a3 получает тип integer по типу значения 555 var r := 3.14; // r получает тип real по типу значения 3.14 var s := 'PascalABC.NET'; // s получает тип string var r1 := r; // r1 получает тот же тип, что и r var m := Min(2,3); // m получает тип, возвращаемый функцией Min var d := DateTime.Now; // d получает тип, возвращаемый DateTime.Now end. Презентация «PascalABC.NET. Простейшие новые возможности» Слайд 3 К оглавлению Множественное присваивание • Можно присваивать сразу нескольким переменным • Переменные из левой части получают значения из правой части одновременно • Можно инициализировать сразу несколько переменных при описании. Их типы выводятся автоматически по типам инициализирующих выражений Код Эквивалентный код begin begin var (a,b,c) := (3,5,4); var a,b,c: integer; a := 3; b := 5; c := 4; (a,b) := (b,a); var t := a; a := b; b := t; (a,b,c) := (b,c,a); var v := a; a := b; b := c; c := t; var (имя, возраст) := ('Петя', 10); var имя := 'Петя'; var возраст := 10; end. end. Презентация «PascalABC.NET. Простейшие новые возможности» Слайд 4 К оглавлению Вывод • Предпочтительные процедуры вывода – Print и Println. Они разделяют элементы вывода пробелами. Print удобно использовать в цикле для вывода серии значений • У элементарных типов integer, real, char, boolean и string имеется метод Print • Процедуры Write и Writeln используются только для вывода без пробелов и для вывода по формату вида r:6:2 (для вещественных типов) или x:5 (для всех типов). • Процедура WriteFormat осуществляет вывод по форматной строке Print Write, WriteFormat begin begin var (x,y) := (1,2); var (a,b,c) := ('a','b','c'); Println(x,y); Writeln(a,b,c); // вывод без пробелов x.Print; y.Print; Writeln(Pi:6:2); Println; // 6 – ширина поля вывода // 2 – количество знаков в дробной части for var i:=1 to 10 do var (x,y) := (3,5); Print(i); WritelnFormat( end. 'Сумма {0} и {1} равна {2}',x,y,x+y); // При выводе на места {0} {1} {2} в форматной строке // подставляются значения x, y, x+y end. 1 2 abc 1 2 3.14 1 2 3 4 5 6 7 8 9 10 Сумма 3 и 5 равна 8 Презентация «PascalABC.NET. Простейшие новые возможности» Слайд 5 К оглавлению Ввод • Для ввода предпочтительно использовать функции ReadInteger, ReadReal и т.д. • Они позволяют описать переменную и инициализировать её одной строкой • Функции ReadInteger2, ReadReal2 и т.д. позволяют вводить сразу от 2 до 3 переменных • Функции TryReadInteger, TryReadReal предназначены для безопасного ввода (если пользователь вводит не число, то они возвращают False) Пример 1. ReadReal, ReadReal2 Пример 2. TryReadReal begin begin var x := ReadReal('Введите x:'); var r: real; var y := ReadReal('Введите y:'); while not TryReadReal(r) do Println('Сумма =',x+y); Println('Неверный ввод. Повторите'); // Первые 2 раза ошибочно вводим не числа var (a,b) := ReadReal2('Введите катеты:'); end. var c := Sqrt(a*a + b*b); Println('Гипотенуза =',c); end. 1abc Неверный ввод. Повторите Hello Неверный ввод. Повторите 3.14 Презентация «PascalABC.NET. Простейшие новые возможности» Слайд 6 К оглавлению Цикл loop Цикл loop используется в случаях, когда номер повторения цикла не важен Пример 1. Геометрическая Пример 2. Сумма квадратов прогрессия нечетных двузначных begin begin var n := 11; var s := 0; var (a,q) := (1,2); var x := 11; loop n do loop 45 do begin begin Print(a); s := s + x; a := a * q x := x + 2 end; end; end. s.Print; end. 1 2 4 8 16 32 64 128 256 512 1024 2475 Презентация «PascalABC.NET. Простейшие новые возможности» Слайд 7 К оглавлению Цикл for • Счётчик цикла for рекомендуется описывать непосредственно в заголовке цикла: for var i. В этом случае счётчик цикла for недоступен после цикла • Если использовать старый синтаксис, то выдаётся предупреждение «Параметр цикла for в PascalABC.NET должен описываться в заголовке цикла» Пример 1. Два Пример 2. Вывод таблицы последовательных цикла for квадратных корней begin begin for var i:=0 to 9 do for var i:=1 to 9 do Print(1+2*i); Println(i,Sqrt(i)) Println; end. // Переменная i здесь недоступна for var i:=0 to 9 do Print(5+5*i); end. 1 1 2 1.4142135623731 3 1.73205080756888 1 3 5 7 9 11 13 15 17 19 4 2 5 10 15 20 25 30 35 40 45 50 5 2.23606797749979 6 2.44948974278318 7 2.64575131106459 8 2.82842712474619 9 3 Презентация «PascalABC.NET. Простейшие новые возможности» Слайд 8 К оглавлению Расширенные операторы присваивания • Расширенные операторы присваивания +=, -=, *= и /= встречаются во многих языках программирования • «+=» читается как «увеличить на», а «*=» читается как «увеличить в» • a += 1 и a *= 2 воспринимается лучше чем a := a + 1 и a := a * 2 Пример 1. Сумма квадратов Пример 2. 10! begin begin var n := ReadInteger; var n := 10; var sum := 0; var p := 1; for var i:=1 to n do for var i:=2 to n do sum += i*i; p *= i; Print('Сумма квадратов первых', n, Print('10! =', p); 'чисел =', sum); end. end. 10 10! = 3628800 Сумма квадратов первых 10 чисел = 385 Презентация «PascalABC.NET. Простейшие новые возможности» Слайд 9 К оглавлению Возведение в степень • Для возведения в степень имеется также функция Power(x,y), а также более эффективные функции Sqr(x) и Sqrt(x) для возведения в квадрат и извлечения квадратного корня соответственно • Для возведения в степень используется операция **, которая более эффективна чем функция Power при возведении в целую степень Производительность при Пример 1. Сумма квадратов возведении в целую степень begin begin Println(Power(3,5), 3 ** 5); var n := 20000000; Println(Power(2,-10),2 ** -10); var r := 0.0; Println(Sqr(2.5), 2.5 ** 2); var d := 100; Println(Sqrt(2), 2 ** 0.5); for var i:=1 to n do r += (1.0-i/n) ** d; var b: BigInteger := 2; Println(r,MillisecondsDelta,'мс'); Println(Power(b,50), b ** 50); end. r := 0.0; for var i:=1 to n do r += (1.0-i/n) ** real(d); Println(r,MillisecondsDelta,'мс'); // Производительность: 243 243 // при возведении в целую степень 100: 249 мс 0.0009765625 0.0009765625 // при возведении в вещественную степень 100: 1081 мс 6.25 6.25 end. 1.4142135623731 1.4142135623731 198019.301979065 249 мс 1125899906842624 1125899906842624 198019.301979065 1081 мс Презентация «PascalABC.NET. Процедуры, функции, лямбда-выражения» Слайд 10 К оглавлению Тип BigInteger Тип BigInteger предназначен для вычислений с длинными целыми Пример 2. Тысячное число Пример 1. 100! Фибоначчи begin function Fib(n: integer): BigInteger; var n := 100; begin var p: BigInteger := 1; var a,b: BigInteger; for var i:=2 to n do (a,b) := (1,1); p *= i; loop n-1 do Write(n,'! = ', p); (a, b) := (b, a + b); end. Result := a end; begin Print(Fib(1000)); end. 100! =_9332621544394415268169923885626670049 43466557686937456435688527675040625802564660 07159682643816214685929638952175999932299156 51737178040248172908953655541794905189040387 08941463976156518286253697920827223758251185 98400792551692959225930803226347752096896232 210916864000000000000000000000000 39873322471161642996440906533187938298969649 928516003704476137795166849228875 Презентация «PascalABC.NET. Простейшие новые возможности» Слайд 11 К оглавлению Самое важное • В данной презентации содержатся основные конструкции, многие из которых присутствуют практически в каждой программе на PascalABC.NET • Переменные практически всегда описываются с инициализацией и автовыводом типа: var p := 1 • Переменные преимущественно описываются внутри begin-end • Множественное присваивание делает запись программы более короткой и понятной: (x,y) := (2,3) • Классическая задача о перемене местами двух значений записывается максимально компактно с помощью множественного присваивания: (a,b) := (b,a) • Расширенные операторы присваивания делают более понятной запись таких действий как «увеличить на 1» (a += 1) и «увеличить в 2 раза» (a *= 2) • Тип BigInteger позволяет легко решать задачи, в которых возникают длинные целые: например, вычислять 100! • Основная процедура вывода – Print, она разделяет элементы вывода пробелами • Для элементарных типов integer, real, char, boolean и string имеется метод Print • Для вывода по формату используются либо форматы вывода x:5 и x:5:2 в операторе Write либо форматная строка и оператор WriteFormat • Счётчик цикла for должен описываться в заголовке цикла: for var i • Цикл loop используется, когда номер итерации цикла не важен • Для ввода предпочтительно использовать функции ReadInteger, ReadReal и проч. • Для ввода нескольких однотипных значений используются ReadInteger2 и проч. Презентация «PascalABC.NET. Простейшие новые возможности» Слайд 12.

View Full Text

Details

  • File Type
    pdf
  • Upload Time
    -
  • Content Languages
    English
  • Upload User
    Anonymous/Not logged-in
  • File Pages
    12 Page
  • File Size
    -

Download

Channel Download Status
Express Download Enable

Copyright

We respect the copyrights and intellectual property rights of all users. All uploaded documents are either original works of the uploader or authorized works of the rightful owners.

  • Not to be reproduced or distributed without explicit permission.
  • Not used for commercial purposes outside of approved use cases.
  • Not used to infringe on the rights of the original creators.
  • If you believe any content infringes your copyright, please contact us immediately.

Support

For help with questions, suggestions, or problems, please contact us