Модуль 1. Практическое занятие 2. Переменные арифметических типов, тернарная операция, приведение типов

Содержание

Слайд 2

Схема создания программы

Шапка
-------------------------------
Пролог

Ввод

Обработка

Эпилог

Вывод

1

2

Схема создания программы Шапка ------------------------------- Пролог Ввод Обработка Эпилог Вывод 1 2

Слайд 3

Задача 1

 

Задача 1

Слайд 4

Задача 1

using System;
class Program {
public static void Main() {
uint n;

Задача 1 using System; class Program { public static void Main() {
// Номер члена ряда
double b, // Вспомогательная переменная
un; // Оценка по формуле Бине
int res; // Целочисленное значение члена
string line; // Строка для приёма данных 

Console.WriteLine("Для выхода из программы нажмите ENTER.");
Console.ReadLine();
} //Конец определения метода Main()
} //Конец объявления класса Program

2

Пролог

Эпилог

1

1

Всегда положительное число. Используем беззнаковый целый

Слайд 5

Задача 1. Реализация без метода

b = (1 + Math.Sqrt(5)) / 2;
un =

Задача 1. Реализация без метода b = (1 + Math.Sqrt(5)) / 2;
(Math.Pow(b, n) - Math.Pow(-b, -n)) / (2*b-1);
res = (int)(un + 0.5);

Console.Write("Введите номер члена ряда: ");
line = Console.ReadLine();
if (!uint.TryParse(line, out n)) {
Console.WriteLine("Ошибка ввода!");
return; }

Console.WriteLine("un = " + un + ", число Фибоначчи: " + res);

Ввод

Обработка

Вывод

double Math.Pow(double <параметр_1>, double <параметр_2>)
Возвращает значение типа double равное результату возведения <параметр_1> в степень <параметр_2>
http://msdn.microsoft.com/en-us/library/system.math.pow(v=vs.85).aspx
double Math.Sqrt(double <параметр>)
Возвращает значение типа double, равное корню квадратному из <параметр>
http://msdn.microsoft.com/en-us/library/system.math.sqrt(v=vs.85).aspx

Слайд 6

Задача 1. Поэтапно модифицируем код

Этап 1. Выделение метода Un()
Какой код будет перемещён

Задача 1. Поэтапно модифицируем код Этап 1. Выделение метода Un() Какой код
в метод Un()?
Какой тип возвращает метод Un()?
Как изменится код основной программы?
Этап 2. Добавление цикла повторения решения

Слайд 7

Задача 1. Этап 1. Выделение метода

using System;
class Program {
public static int

Задача 1. Этап 1. Выделение метода using System; class Program { public
Un(uint n) {
double b = (1 + Math.Sqrt(5)) / 2;
double un = (Math.Pow(b, n) - Math.Pow(-b, -n)) / (2 * b - 1);
return (int)(un + 0.5);
} // Конец определения метода Un()
public static void Main() {
uint n; // Номер члена ряда
int res; // Целочисленное значение члена
string line; // Строка для приёма данных 
do { Console.Write("Введите номер члена ряда: ");
line = Console.ReadLine();
} while (!uint.TryParse(line, out n));
res = Un(n); // Вызов метода
Console.WriteLine("число Фибоначчи: " + res);
Console.WriteLine("Для выхода из программы нажмите ENTER.");
Console.ReadLine();
} //Конец определения метода Main()
} //Конец объявления класса Program

Слайд 8

Задача 1. Этап 2. Добавление цикла повторения решения

//Нажатая пользователем клавиша
ConsoleKeyInfo клавиша;
do

Задача 1. Этап 2. Добавление цикла повторения решения //Нажатая пользователем клавиша ConsoleKeyInfo
{ // цикл для повторения решения задачи
/* …. */
/* код решения задачи*/
/* …. */
} while (/* условие */);

do {
Console.Write("Введите номер члена ряда: ");
line = Console.ReadLine();
uint.TryParse(line, out n);
if (n <= 0) break;
res = Un(n);
Console.WriteLine("число Фибоначчи: " + res);
} while (true);

Бесконечный цикл

Прерывание цикла

Слайд 9

Задание к задаче 1

#TODO: Организуйте повторение решения в задаче 1 с использованием

Задание к задаче 1 #TODO: Организуйте повторение решения в задаче 1 с
цикла с предусловием

Например,
int i = 5;
while (i > 1) {
i--;
}

Слайд 10

Задача 2. «Шапка» кода программы

/*
Дисциплина: "Программирование"
Группа: 101ПИ/1
Студент: Иванов Иван

Задача 2. «Шапка» кода программы /* Дисциплина: "Программирование" Группа: 101ПИ/1 Студент: Иванов
Иванович
Задача: Написать метод для вычисления площади и длины окружности, радиус которой задает вещественный параметр.
В основной программе, вводя значения радиуса, с помощью обращения к методу, вычислять площадь и длину окружности. При вводе применять метод double.TryParse() и проверять корректность введенного значения. При выводе использовать форматную строку метода WriteLine(). Окончание работы программы – ввод нулевого или отрицательного значения радиуса.
Дата: 2015.09.17
*/

Слайд 11

Задача 2. Выделяем этапы

Этап 1. Определение переменных, необходимых для работы основной программы

Задача 2. Выделяем этапы Этап 1. Определение переменных, необходимых для работы основной
и организация вывода
Какие нужны переменные?
Какие у них типы данных?
Этап 2. Получение от пользователя значения радиуса r с применением метода TryParse()
Этап 3. Реализация метода вычисления площади и длины окружности
Какого типа значение возвращает метод?
Как вернуть получить из метода значения и длины окружности и площади одновременно?
Этап 4. Вызов метода из основной программы
Этап 5. Организация форматированного вывода
Этап 6. Организация повторения решения

Слайд 12

Задача 2. Этап 1. Объявление переменных

using System;
class MyExample {
public static void

Задача 2. Этап 1. Объявление переменных using System; class MyExample { public
Main() {
double r, //радиус
s, // площадь круга
c; // длина окружности
string str; // Рабочая строка для ввода и вывода данных

1

Пролог

2

1

Все значения могут быть вещественными числами. Используем тип double

Слайд 13

Задача 2. Этап 2. Получение значения радиуса

Шаг 1. Получить значение радиуса МОЖНО

Задача 2. Этап 2. Получение значения радиуса Шаг 1. Получить значение радиуса
БЫЛО БЫ ТАК:
Console.Write("Введите радиус: ");
str = Console.ReadLine(); //Читаем символьную строку
double.TryParse(str, out r); //Преобразуем строку в число

Шаг 2. Модифицируем ПРЕДЛОЖЕННЫЙ код, чтобы проверялась корректность введённого значения
do {
Console.Write("Введите радиус: ");
str = Console.ReadLine(); //Читаем символьную строку
double.TryParse(str, out r);
} while (!double.TryParse(str, out r)); //Преобразуем строку в число

Слайд 14

Проверка корректности ввода данных

Например,
double x;
do
Console.Write("Введите число: ");
while (!double.TryParse(Console.ReadLine(), out x));

Или,

Проверка корректности ввода данных Например, double x; do Console.Write("Введите число: "); while
когда недопустим КОНКРЕТНЫЙ символ ‘q’:
char ch;
do
Console.Write("Введите символ: ");
while (!char.TryParse(Console.ReadLine(), out ch) || ch=='q');

Слайд 15

Методы обработки ввода (повторение 1-го семинара)

bool <тип>.TryParse(string <строка>, out <тип> <параметр>)
Метод преобразует

Методы обработки ввода (повторение 1-го семинара) bool .TryParse(string , out ) Метод
строковое представление числа (первый параметр) в эквивалентное ему числовое значение типа <тип> и присваивает это значение переменной, использованной в качестве аргумента, заменившего второй параметр метода. Метод возвращает значение true, если преобразование выполнено успешно и false – в противном случае.

<тип> <тип>.Parse(<строка>)
преобразует строковое представление числа в эквивалентное ему число типа <тип>. В случае, если строковое представление не может быть преобразовано к соответствующему типу, возникает исключение. ОБРАБОТКУ ИСКЛЮЧЕНИЙ РАССМОТРИМ ЧУТЬ ПОЗЖЕ!

a = int.Parse(str);

int.TryParse(str, out b);

Слайд 16

Задача 2. Этап 3. Реализация метода

using System;
class MyExample {
public static double

Задача 2. Этап 3. Реализация метода using System; class MyExample { public
Square(double r, out double len) {
len = 2 * Math.PI * r;
return Math.PI * r * r;
} //Конец определения Square()
public static void Main() {
double r, //радиус
s, // площадь круга
c; // длина окружности
string str; // Рабочая строка для ввода и вывода данных
do {
Console.Write("Введите радиус: ");
str = Console.ReadLine(); //Читаем символьную строку
} while (!double.TryParse(str, out r)); // Преобразуем строку в число
// Вызов метода и строку с результатом ОФОРМИТЕ САМОСТОЯТЕЛЬНО!
Console.WriteLine(str); // выводим строку с результатом
Console.WriteLine("Для выхода из программы нажмите ENTER.");
Console.ReadLine();
} //Конец определения Main()
} //Конец объявления MyExample

Слайд 17

Задание к задаче 2

#TODO: Самостоятельно выполните эпап 5. Организуйте вывод информации о

Задание к задаче 2 #TODO: Самостоятельно выполните эпап 5. Организуйте вывод информации
площади и длине окружности, используя форматную строку методов Console.Write() и Console.WriteLine().

#TODO: Самостоятельно выполните этап 6.

Структура поля подстановки:
{N[,W][:S[R]]}, где
N – номер аргумента;
W – ширина поля;
S – спецификатор формата;
R – спецификатор точности.

Статья «Строки стандартных числовых форматов на msdn.microsoft.com - http://msdn.microsoft.com/ru-ru/library/dwhawy9k.aspx
Статья «Составное форматирование» на msdn.microsoft.com - http://msdn.microsoft.com/ru-ru/library/txafckwd.aspx

Спецификатор S:
С или с – валютный
D или d – целочисленный
E или e – экспоненциальный
F или f – с фиксированной точкой
G или g – «короткий» из E или F
X или x – шестнадцатеричный

Слайд 18

Форматирование строк при выводе

int i = 3;
double d = 1 / (double)i;

Форматирование строк при выводе int i = 3; double d = 1

3 - 0,333333333333333

3 - 3

Console.WriteLine("{0} - {1:f5}", i, d);

3 - 0,33333

Console.WriteLine("{1} - {2}", i, d);

Исключение!!!

Слайд 19

Задача 3

/* Задача на применение тернарной операции.
(Не применять оператор if.)
Написать метод,

Задача 3 /* Задача на применение тернарной операции. (Не применять оператор if.)
так обменивающий значения трех переменных x, y, z, чтобы выполнилось требование: x <= y <= z.
В основной программе, вводить значения трех переменных и упорядочивать их с помощью обращения к написанному методу.
Для выхода из программы вводите ESC, для повторения решения – любую другую клавишу.
*/

Слайд 20

Задача 3

using System;
class Program {
public static void Main() {
int x=0,

Задача 3 using System; class Program { public static void Main() {
y=0, z=0;
string str; // Строка для приёма данных

Console.WriteLine("x = " + x);
Console.WriteLine("y = " + y);
Console.WriteLine("z = " + z);
} //Конец метода Main()
} //Конец объявления класса Program

#TODO: Самостоятельно реализуйте получение от пользователя значений переменных x, y и z.

Слайд 21

Задача 3

public static void ValuesSort(ref int x, ref int y, ref int

Задача 3 public static void ValuesSort(ref int x, ref int y, ref
z) {
// Вспомогательные переменные
int a1 = 0, a2 = 0, a3 = 0;
a1 = x < y ? (z < x ? z : x) : (y < z ? y : z);
a3 = x > y ? (z > x ? z : x) : (y > z ? y : z);
// Самостоятельно определите значение а2 !!!!
x = a1; y = a2; z = a3;
}

#TODO: Самостоятельно реализуйте вызов метода из основной программы.

#TODO: .Дополните основную программу циклом повторения решения, согласно условиям задачи. Для справки используйте следующий слайд.

Слайд 22

Задача 3. Повторение решения

//Нажатая пользователем клавиша
ConsoleKeyInfo клавиша;
do { // цикл для

Задача 3. Повторение решения //Нажатая пользователем клавиша ConsoleKeyInfo клавиша; do { //
повторения решения задачи
/* …. */
/* код решения задачи*/
/* …. */
Console.WriteLine("Для выхода нажмите клавишу ESC!");
клавиша = Console.ReadKey(true);
} while (клавиша.Key != ConsoleKey.Escape);

ConsoleKeyInfo Console.ReadKey(bool intercept)
получает код нажатой пользователем клавиши (символьной или функциональной). Метод возвращает ссылку на объект типа ConsoleKeyInfo. Код нажатой клавиши консоли - Console.ReadKey(true).Key. Перечисление ConsoleKey задает коды клавиш. Параметр intercept - признак визуализации вводимого символа.

Слайд 23

Задача 4

/* Задача 5.
Написать метод с целочисленным параметром, определяющий является ли

Задача 4 /* Задача 5. Написать метод с целочисленным параметром, определяющий является
значение аргумента кодом цифры, кодом буквы русского алфавита (прописной либо строчной), или ни тем и ни другим. В основной программе, вводя целые числа, выводить сообщения о них: «Это цифра!», «Это буква!», «Это ни буква, ни цифра!». Для выхода из программы – ESC, для повторения решения - любой символ. При анализе цифрового кода использовать тернарную операцию. Строку сообщения может возвращать метод, либо метод возвращает признак, а строку формирует основная программа
*/

Слайд 24

Задача 4

Console.WriteLine("Для выхода из программы нажмите ENTER.");
Console.ReadLine();
} //Конец определения

Задача 4 Console.WriteLine("Для выхода из программы нажмите ENTER."); Console.ReadLine(); } //Конец определения
метода Main()
} //Конец объявления класса Program

Эпилог

using System;
class Program {
public static void Main() {
uint code;
string str; // Строка для приёма данных
string report; // Строка с заключением о коде
uint код_А = (uint)'А', // Числовое значение кода буквы А
код_а = (uint)'а',
код_я = (uint)'я',
код_Я = (uint)'Я‘,
код_0 = (uint)‘0‘; // Числовое значение кода цифры 0

Пролог

2

Слайд 25

report = code <= '9' && code >= '0' ? "Это цифра:

report = code = '0' ? "Это цифра: " + (char)code :
" + (char)code
: code <= 'Я' && code >= 'А' ? "Это прописная буква: " + (char)code
: code <= 'я' && code >= 'а' ? "Это строчная буква: " + (char)code
: "Неизвестный символ!";
Console.WriteLine(report);

Задача 4

Console.WriteLine("Коды граничных символов:");
Console.WriteLine("Код А = " + код_А + "; Код Я = " + код_Я +
"; Код а = " + код_а + "; Код я = "+ код_я +
"; Код нуля = " + код_0);
Console.Write("Введите значение code: ");
str = Console.ReadLine();
uint.TryParse(str, out code);

Ввод

Обработка – тело метода

Слайд 26

Задача 5

/*
Выделение отдельных цифр натурального числа
Задача.
Ввести трехзначное натуральное число и

Задача 5 /* Выделение отдельных цифр натурального числа Задача. Ввести трехзначное натуральное
напечатать его цифры "столбиком".
*/

Слайд 27

Задача 5

using System;
class Program {
public static void Main() {
uint numb, //

Задача 5 using System; class Program { public static void Main() {
Введенное число
figure, // Очередная цифра
temp; // рабочая переменная
string str; // Строка для приёма данных

Console.WriteLine("Для выхода из программы нажмите ENTER.");
Console.ReadLine();
} //Конец определения метода Main()
} //Конец объявления класса Program

Пролог

Эпилог

2

Слайд 28

Задача 5

Console.Write("Введите целое от 100 до 999: ");
str = Console.ReadLine();
uint.TryParse(str, out numb);

Задача 5 Console.Write("Введите целое от 100 до 999: "); str = Console.ReadLine();
// НУЖНА проверка смысла

figure = numb / 100; // первая цифра
Console.WriteLine(figure);
temp = numb - figure * 100;
figure = temp / 10; // вторая цифра
Console.WriteLine(figure);
figure = temp - figure * 10; // третья цифра
Console.WriteLine(figure);

Ввод

Обработка

Слайд 29

using System;
namespace _2_5 {
class Program {
static void Numerals(uint number, out

using System; namespace _2_5 { class Program { static void Numerals(uint number,
uint f1, out uint f2, out uint f3) {
f1 = number / 100; // первая цифра
uint temp = number - f1 * 100;
f2 = temp / 10; // вторая цифра
f3 = temp - f2 * 10; // третья цифра
}
static void Main( ) {
uint numb = 759;
do Console.Write("Введите целое от 100 до 999: ");
while (!uint.TryParse(Console.ReadLine(), out numb)|| numb < 100 || numb >999);
uint a, b, c;
Numerals(numb, out a, out b, out c);
Console.WriteLine(a);
Console.WriteLine(b);
Console.WriteLine(c);
}
}
}

Добавить повторение решения задачи

Слайд 30

/*
Задан круг с центром в начале координат и радиусом R=10.
Ввести

/* Задан круг с центром в начале координат и радиусом R=10. Ввести
координаты точки и вывести сообщение: «Точка внутри круга!» или «Точка вне круга!».
Предусмотреть проверку входных данных и цикл повторения решений.
*/

Задача 6

Слайд 31

Задача 6

report += x*x + y*y > R*R ? "вне круга!"

Задача 6 report += x*x + y*y > R*R ? "вне круга!"
: "внутри круга!";

using System;
class Program {
static void Main() {
const double R=10;
double x, y;
Console.Write("x = ");
double.TryParse(Console.ReadLine(), out x) ;
Console.Write("y = ");
double.TryParse(Console.ReadLine(), out y) ;
string report = "Точка ";

Console.WriteLine(report);
Console.WriteLine("Для выхода из программы нажмите ENTER.");
Console.ReadLine();
}
}

Пролог

Ввод

Обработка

Эпилог

Слайд 32

Задача 7

//Вычисление значения логической функции !(X&Y|Z)
using System;
class Program {
public static void Main()

Задача 7 //Вычисление значения логической функции !(X&Y|Z) using System; class Program {
{
int tmp; //рабочая переменная
bool x, y, z; //аргументы логической функции
string str; //строка для приема данных

Console.WriteLine("Для выхода из программы нажмите ENTER.");
Console.ReadLine();
} //Конец определения метода Main()
} //Конец объявления класса Program

Пролог

Эпилог

2

Слайд 33

Задача 7

// Пусть положительное значение изображает TRUE
Console.Write("Введите значение x: ");
str = Console.ReadLine();
int.TryParse(str,

Задача 7 // Пусть положительное значение изображает TRUE Console.Write("Введите значение x: ");
out tmp);

x = tmp > 0 ? true : false;

Ввод

Обработка

Повторяем эти действия для переменных y и z, затем выводим на экран результат вычисления:

Console.WriteLine("!(X&&Y||Z) = " + !(x && y || z));

Вывод

Имя файла: Модуль-1.-Практическое-занятие-2.-Переменные-арифметических-типов,-тернарная-операция,-приведение-типов.pptx
Количество просмотров: 55
Количество скачиваний: 0