Функції і процедури в C#

+1

No comments posted yet

Comments

Slide 1

Профільна інформатика 10 клас Лінія “АТП” C# Тема 10: «Підпрограми. Процедури та функції»

Slide 2

21.04.2012 Робота вч. Кравчук Г.Т. 2 Були такі поняття ("функції", "процедури" і "підпрограми") в більш ранніх мовах програмування. У С# те, що я назвала процедурами і функціями є методами. Робити ООП процедурним ми не будемо, але познайомимося із даними поняттям і розглянемо деякі задачі.

Slide 3

Поняття функції і процедури в C # Процедура - це підпрограма, яка може викликатися в коді основної програми і виробляти будь-які дії з переданими в неї змінними. Функція - це така ж процедура, тільки їй властиве явне повернення результату її роботи. У мові C # немає спеціальних ключових слів - procedure і function, але присутні самі ці поняття. Синтаксис оголошення методу дозволяє однозначно визначити, чим є метод - процедурою або функцією. 21.04.2012 3 Робота вч. Кравчук Г.Т.

Slide 4

Функція відрізняється від процедури двома особливостями: Процедура C # має свої особливості:    Зверніть увагу! 21.04.2012 4 Робота вч. Кравчук Г.Т.

Slide 5

Зазвичай метод воліють реалізувати у вигляді функції тоді, коли він має один вихідний аргумент, що розглядається як результат обчислення значення функції. Можливість виклику функцій у виразах також впливає на вибір на користь реалізації методу у вигляді функції. В інших випадках метод реалізують у вигляді процедури. static <тип, що повертається в основну програму> <Ім’я функції>(аргумент і його тип) { … return <змінна, значення якої повертається в основну програму> } 21.04.2012 5 Робота вч. Кравчук Г.Т.

Slide 6

Як визначити що перед вами процедура або функція і як взагалі їх писати?! Запам'ятайте процедура завжди починається зі слова void, а функція з назви класу або типу, який вона повертає (наприклад string). 21.04.2012 6 Робота вч. Кравчук Г.Т.

Slide 7

Процедури Функції <модифікатор доступу> Void <назва> (параметри) { тіло процедури } <модифікатор доступу> <тип> <назва> (параметри) { Тіло функції Return <тип>; } Семантика <модифікатор доступу>: дозволяє бачити або приховувати процедури для їх виклику, може бути: public private. Так само існує модифікатор static. 21.04.2012 7 Робота вч. Кравчук Г.Т.

Slide 8

До уваги! Статичні процедури і функції (зі словом статик) постійно знаходяться в пам'яті комп'ютера і створюються при запуску програми, в той час як не статичні створюються лише під час створення екземпляра класу, до якого вони належать. Процедури і функції потрібні для того, щоб оптимізувати код програми. 21.04.2012 8 Робота вч. Кравчук Г.Т.

Slide 9

До уваги! Процедури дозволяють виділити повторюваний код в підпрограму і викликати її на вимогу, що дозволяє уникнути багаторазового написання повторюваного коду, а так само зменшити місце займане програмою. Також функції і процедури дозволяють виділяти ділянки коду в логічні блоки, що допомагає, потім її швидше розбирати і розуміти, ніж читати однотипний код програми. А також в разі якщо ви виявили помилку в коді процедури (функції) її виправлення призведе до виправлення у всій програмі і не доведеться переглядати весь написаний талмуд повторюваних шаблонів. 21.04.2012 9 Робота вч. Кравчук Г.Т.

Slide 10

static double getVal() { double checkVal; // присвоєння checkVal значення, // отриманого в результаті обчислень. if (checkVal < 5) return 4.7; return 3.2; } Повернення значень

Slide 11

static double getVal() { double checkVal; // присвоєння checkVal значення, // отриманого в результаті обчислень. if (checkVal < 5) return 4.7; } Неправильно! А якщо умова не справджується, що вертається?!

Slide 12

static <тип, що повертається> <ім’я функції> (<тип параметра1> < ім’я параметра1>, . . . ) { . . . return <змінна, або значення, що повертається>; } int a = 10; int b = 20; int c = max(a, b); //Функция max(a, b); //Процедура Відмінність у синтаксисі

Slide 13

static void myFunction(string myString, double myDouble) { . . . } Неправильно! myFunction(2.6, ”Hello”); myFunction(”Hello”);

Slide 14

static double product(double param1, double param2) { return param1 * param2; }

Slide 15

21.04.2012 Робота вч. Кравчук Г.Т. 15 int max( int f, int s ) { if ( f > s ) return f; else return s; } А це процедура(функція , яка не вертає значення ) void max( int f, int s ) { if ( f > s ) MessageBox.Show( f ); else MessageBox.Show( s ); }

Slide 16

static <Тип> <ім’яфункції>(<n1Тип> < n1ім’я> ,.., params <тип>[] <ім’я>) { . . . return <значення, що вертається>; } // звертання до підпрограми <ім’яфункції> (<n1>, . . . , <значення1>, <значення2>, . . .) ; Звертання до підпрограми

Slide 17

class Program { static int MaxValue(int[] intArray) { int maxVal = intArray[0]; for (int i = 1; i < intArray.Length; i++) if (intArray[i] > maxVal) maxVal = intArray[i]; return maxVal; } static void Main(string[] args) { int[] myArray = { 1, 8, 3, 6, 2, 5, 9, 3, 0, 2 }; int maxVal = MaxValue(myArray); Console.WriteLine("Максимальний елемент = {0}", maxVal); } }

Slide 18

class Program { static int sumVals(params int[] vals) { int sum = 0; foreach (int val in vals) sum += val; return sum; } static void Main() { int sum = sumVals(1, 5, 2, 9, 8); Console.WriteLine("Сума значень = {0}", sum); } }

Slide 19

class Program { static void showDouble(int val) { val *= 2; Console.WriteLine("подвоєне = {0}" , val ); } static void Main(string[] args) { int myNumber = 5; Console.WriteLine("мiй номер = {0}", myNumber); showDouble(myNumber); Console.WriteLine("мiй номер = {0}", myNumber); } } Приклад 1

Slide 20

class Program { static void showDouble(ref int val) { val *= val; Console.WriteLine("квадрат номера = {0}", val); } static void Main() { int myNumber = 5; Console.WriteLine("мiй номер = {0}", myNumber); showDouble(ref myNumber); Console.WriteLine("мiй новий номер = {0}", myNumber); } } Приклад 2

Slide 21

class Program { static int maxValue(int[] intArray, out int maxlndex) { int maxVal = intArray[0]; maxlndex = 0; for (int i = 1; i < intArray.Length; i++) { if (intArray[i] > maxVal) { maxVal = intArray[i]; maxlndex = i; } } return maxVal; } static void Main() { int[] myArray = { 1, 8, 3, 6, 2, 5, 9, 3, 0, 2 }; int maxlndex; Console.WriteLine("В даному масивi: "); for (int i = 0; i < 10; i++) Console.Write(myArray[i]+" "); maxValue(myArray, out maxlndex); Console.WriteLine(); Console.WriteLine("Максимальний eлемент масиву {0}", myArray[maxlndex]); Console.WriteLine("Його iндекс {0}", maxlndex + 1); } }

Slide 22

21.04.2012 Робота вч. Кравчук Г.Т. 22 class Program { static int maxValue(int[] intArray, out int maxlndex) { int maxVal = intArray[0]; maxlndex = 0; for (int i = 1; i < intArray.Length; i++) { if (intArray[i] > maxVal) { maxVal = intArray[i]; maxlndex = i; } } return maxVal; } static void Main() { int[] myArray = { 1, 8, 3, 6, 2, 5, 9, 3, 0, 2 }; int[] Array1 = { 0, 5, 3, 12, 2, 7, 9, 3, 9, -4 }; int maxlndex; Console.WriteLine("В даному масивi A: "); for (int i = 0; i < 10; i++) Console.Write(myArray[i] + " "); maxValue(myArray, out maxlndex); Console.WriteLine(); Console.WriteLine("Максимальний eлемент масиву {0}", myArray[maxlndex]); Console.WriteLine("Його iндекс {0}", maxlndex + 1); Console.WriteLine(); Console.WriteLine("В даному масивi B : "); for (int i = 0; i < 10; i++) Console.Write(Array1[i] + " "); maxValue(Array1, out maxlndex); Console.WriteLine(); Console.WriteLine("Максимальний eлемент масиву {0}", Array1[maxlndex]); Console.WriteLine("Його iндекс {0}", maxlndex + 1); } }

Slide 23

class Program { static void Write() { string myString = "рядок виводиться з процедури Write()"; Console.WriteLine("текст - {0}", myString); } static void Main(string[] args) { Console.WriteLine("Ми перейшли у процедуру"); Write(); Console.WriteLine("Ми повернулися назад у програму"); string myString = "даний рядок з основної програми Main()"; Console.WriteLine("текст - {0}", myString); } }

Slide 24

class Program { static string myString; static void Write() { Console.WriteLine("Текст виводиться з процедури метод Write()"); string myString = "Рядок з Write()"; Console.WriteLine("текст myString - {0}", myString); Console.WriteLine("текст з Program.myString - {0}", Program.myString); } static void Main () { Program.myString = "Глобальний рядок - текст з основної програми"; Write(); Console.WriteLine(); Console.WriteLine("Текст виводиться з процедури метод Main ()"); string myString = "Рядок з процедури з Main()"; Console.WriteLine("myString = {0}", myString); Console.WriteLine("myString = {0}", Program.myString); } }

Slide 25

class Program { static void Main() { int i; string text = ""; for (i = 0; i < 10; i++) { text = "Рядок " + Convert.ToString(i); Console.WriteLine("{0}", text); } Console.WriteLine("Останнє виведення тексту в циклi: {0}", text); } }

Slide 26

Обчислення факторіала числа n class Program { static long F(int n) { if (n==0 || n==1) return 1; else return n*F(n-1); } static void Main() { Console.Write("Введи довiльне невiдємне цiле число n="); int n =int.Parse( Console.ReadLine()); long f = F(n); Console.WriteLine("{0}!={1}",n, f); } } 21.04.2012 26 Робота вч. Кравчук Г.Т.

Slide 27

Пошук найменшого спільного кратного class Program { static int NCD(int x, int y) { if (x != 0) return NCD((y % x), x); else return y; } static int NCK(int x, int y) { return (x / NCD(x, y)) * y; } static void Main(string[] args) { int a, b; Console.WriteLine("Знайдемо найменше спiльне кратне для двох натуральних чисел"); Console.WriteLine("Введiть числа a i b:"); a = Int32.Parse(Console.ReadLine()); b = Int32.Parse(Console.ReadLine()); Console.WriteLine("НСК чисел {0}, i {1} дорiвнює {2} ", a, b, NCK(a, b)); Console.Write("Вiдповiдь: "); Console.WriteLine("НСК ({0};{1}) = {2}", a, b, NCK(a, b)); } } 21.04.2012 27 Робота вч. Кравчук Г.Т.

Slide 28

Пошук найбільшого спільного дільника class Program { private static int NOD(int a, int b) { while (a != b) if (a > b) a -= b; else b -= a; return a; } static void Main(string[] args) { int a, b, c, d; Console.WriteLine("Знайдемо НСД 4 чисел"); Console.WriteLine("Введiть a, b, c ,d:"); a = int.Parse(Console.ReadLine()); b = int.Parse(Console.ReadLine()); c = int.Parse(Console.ReadLine()); d = int.Parse(Console.ReadLine()); Console.WriteLine(string.Format(" NDO = {0}", NOD(NOD(a, b), NOD(c, d)))); } } 21.04.2012 28 Робота вч. Кравчук Г.Т.

Slide 29

class Program { public static void Srednee(int[] mas) { double s = 0, sr = 0; for (int i = 0; i < mas.Length; i++) { s += mas[i]; } sr = s / mas.Length; Console.WriteLine(" Середнє арифметичне масиву = " + sr); } public static void Srednee(float[] mas) { Console.WriteLine(); float s = 0, sr = 0; for (int i = 0; i < mas.Length; i++) { s += mas[i]; } sr = s / mas.Length; Console.WriteLine("Середнє арифметичне масиву = " + sr); } static void Main(string[] args) { Random rnd = new Random(); Console.Write("Виберiть тип масиву(1 - int; 2 - float): "); string s = Console.ReadLine(); switch (s) { case "1": Console.WriteLine("Вибраний тип масиву int!"); int[] mas = new int[10]; for (int i = 0; i < 10; i++) { mas[i] = rnd.Next(1, 10); Console.Write(mas[i] + " "); } Srednee(mas); break; case "2": Console.WriteLine("Вибраний тип масиву float!"); float[] mas1 = new float[10]; for (int i = 0; i < 10; i++) { mas1[i] = rnd.Next(1, 10); Console.Write(mas1[i] + " "); } Srednee(mas1); break; } } } Написати програму, яка обчислює середнє арифметичне елементів одномірного масиву наперед не відомого типу, використавши підпрограми 21.04.2012 29 Робота вч. Кравчук Г.Т.

Slide 30

21.04.2012 Робота вч. Кравчук Г.Т. 30 IsPrime - функція, що визначатиме просте число чи ні. Вертає логічний вираз true/false using System; class ChkNum { static public bool IsPrime(int x) { if (x < 1) return false; for (int i = 2; i <= x / i; i++) if ((x % i) == 0) return false; return true; } } class Program { static void Main() { Console.Title = "Програма розпізнавання пар взаємно простих чисел"; int a = 0; do { Console.Write("Введiть кiлькiсть пар чисел\t"); } while (!Int32.TryParse(Console.ReadLine(), out a)); int iter = 0; for (int i = 1; a > iter; i++) { if (ChkNum.IsPrime(i) && ChkNum.IsPrime(i + 2)) { Console.WriteLine("\nВзаємно простi числа\t" + i + " и " + (i + 2)); iter++; } } Console.Write("\n\nПрограма завершена. Для виходу натиснiть будь-яку клавiшу"); Console.ReadKey(true); } }

Slide 31

Математичні функції (використайте для створення функцій користувача) Math.Ceiling (<>); Округлення до більшого цілого Math.Floor (<>); Округлення до меншого цілого Math.Cos (<>); Косинус Math.EЧісло е Math.Exp (<>); Експонента Math.Log (<>); Натуральний логарифм Math.Log10 (<>); Десятковий логарифм Math.Max ​​(<>, <>); Максимум з 2 виразів Math.Min (<>, <>); Мінімум з 2 виразів Math.Pi Число пі Math.Pow (<>, <>); Зведення в ступінь Math.Round (<>); Просте округлення Math.Sing (<>); Знак числа Math.Sin (<>); Синус Math.Sqrt (<>); Квадратний корінь Math.Tan (<>); тангенс r =((a+b)*Math.Sin(Math.Pow(x,2))+a*b)/Math.Sqrt(Math.Pow(Math.Cos(x+Math.PI/2),2)-b) 21.04.2012 31 Робота вч. Кравчук Г.Т.

Slide 32

21.04.2012 Робота вч. Кравчук Г.Т. 32 using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace ConsoleApplication1 { class Program { static void Main(string[] args) { double k = 0.5; // тут задаємо крок зміни змінної, у вигляді k - крок ітеррації double m = -1; // тут задаємо нижню межу значення змінної double n = 4; // тут задаємо верхню межу значення змінної double f = 0; // Ініціалізуємо значення функції . Наприклад, задана функція виду f(x) = (x^2 + 4) / sin (x) в межах від -1 до 4 знайти її значення з кроком х рівним 0.5 { for (double i = m; i <= n; i += k) { f = 0; f = (Math.Pow(i, 2) + 4) / Math.Sin(i); // Сюда записуємо функцію // Тепер записуємо недопустимі вирази, як ділення на нуль - їх може бути кілька; тоді їх слід обєднати знаком логічного «АБО», тобто "||” if (Math.Sin(i) == 0) { continue; } Console.Title = "Обчислення значення функцii на промiжку"; // вводимо заголовок вікна // При необхідності виводимо значення змінної, якщо це за умовою не потрібно, то наступний рядок не пишемо Console.WriteLine("x= {0:F1}", i); // для х досить 1 знак після коми - це залежить від значення кроку 0,5 // А це значення функції. Цей рядок пишемо обов’язково Console.WriteLine("f(x)= {0:F13}", f); Console.WriteLine(); } } } } }

Slide 33

Дано чотири точки: (a1,a2),(b1,b2),(c1,c2),(d1,d2). Знайти відстані між точками, використавши підпрограму 21.04.2012 Робота вч. Кравчук Г.Т. 33 class Program { static void f(double x1, double x2, double y1, double y2, int i) { double n; Console.Write("{0}. d= ", i); n = Math.Sqrt(Math.Pow((x2 - x1), 2) + Math.Pow((y2 - y1), 2)); Console.WriteLine("{0:F4}",n); } static void Main(string[] args) { Console.Title = "Обчислення вiдстанi мiж точками"; Console.WriteLine("задаємо координати 1 точки"); double a1,a2; a1 = int.Parse(Console.ReadLine()); a2 = int.Parse(Console.ReadLine()); Console.WriteLine("задаємо координати 2 точки"); double b1, b2; b1 = int.Parse(Console.ReadLine()); b2 = int.Parse(Console.ReadLine()); Console.WriteLine("задаємо координати 3 точки"); double c1, c2; c1 = int.Parse(Console.ReadLine()); c2 = int.Parse(Console.ReadLine()); Console.WriteLine("задаємо координати 4 точки"); double d1, d2; d1 = int.Parse(Console.ReadLine()); d2 = int.Parse(Console.ReadLine()); // Шукаємо відстані між точками f(a1, a2, b1, b2, 0); f(b1, b2, c1, c2, 1); f(c1, c2, d1, d2, 2); f(a1, a2, c1, c2, 3); f(a1, a2, d1, d2, 4); f(b1, b2, d1, d2, 5); Console.WriteLine(); } }

Slide 34

Дано чотири точки: (a1,a2),(b1,b2),(c1,c2),(d1,d2). Знайти відстані між точками, використавши підпрограми (2 спосіб) 21.04.2012 Робота вч. Кравчук Г.Т. 34 class Program { static void f(double x1, double x2, double y1, double y2, int i) { double n; Console.Write("{0}. d= ", i); n = Math.Sqrt(Math.Pow((x2 - x1), 2) + Math.Pow((y2 - y1), 2)); Console.WriteLine("{0:F4}",n); } static void inputxy(int i, ref double x, double y) { Console.WriteLine("задаємо координати {0} точки",i); x = int.Parse(Console.ReadLine()); y = int.Parse(Console.ReadLine()); } static void Main(string[] args) { Console.Title = "Обчислення вiдстанi мiж точками"; double a1=0;double a2=0; double b1=0; double b2=0; double c1 = 0; double c2=0; double d1=0; double d2=0; // Перехід на процедуру вводу координат 4 точок inputxy(1,ref a1,a2); inputxy(2, ref b1, b2); inputxy(3, ref c1, c2); inputxy(4, ref d1, d2); // Перехід на процедуру пошуку відстані між точками Console.WriteLine("Вiдстанi мiж точками"); f(a1, a2, b1, b2, 1); f(b1, b2, c1, c2, 2); f(c1, c2, d1, d2, 3); f(a1, a2, c1, c2, 4); f(a1, a2, d1, d2, 5); f(b1, b2, d1, d2, 6); Console.WriteLine(); } }

Summary: Навчальна презентація для вивчення теми "Підпрограми. Процедури та функції" у профільному класі з поглибленим вивченням інформатики.

Tags: c# програмування підпрограми процедури функції профільна інформатика навчальні презентації з інформатики

URL: