четверг, 29 марта 2018 г.

c#

http://coolcode.ru/primeryi-resheniya-zadach-iz-knigi-m-e-abramyan-1000-zadach-po-programmirovaniyu-case/

Данo цілочисельний масив з 31 елементу, в якому записані значення температури повітря в березні. Елементи масиву можуть набувати значень від (-20) до 20. Знайти середню температуру по всіх днях, коли була відлига (температура піднімалася вище нуля). Гарантується, що хоча б один день в березні була відлига.
інверсія масиву, тобто переворот його в зворотному порядку:


Відсортувати масив
Вся програма умовно поділена на три блоки: введення чисел, сортування і висновок відсортованого масиву. Тут використовуються всі ті ж конструкції, що були розглянуті раніше. Спочатку в циклі ми вводимо все числа для масиву. Так як метод Console.ReadLine () повертає вводиться рядок, а нам потрібні числа, тому ми цей рядок переводимо в число за допомогою методу Int32.Parse (Console.ReadLine ()).

Потім сортуємо: виконуємо проходи по масиву і порівнюємо елементи. Якщо елемент з меншим індексом більше елемента з великим індексом, то міняємо елементи місцями.
Хоча в мові C # є масиви, які зберігають в собі набори однотипних об'єктів, але працювати з ними не завжди зручно. Наприклад, масив зберігає фіксовану кількість об'єктів, однак якщо ми заздалегідь не знаємо, скільки нам буде потрібно об'єктів. І в цьому випадку набагато зручніше застосовувати колекції. Ще один плюс колекцій полягає в тому, що деякі з них реалізує стандартні структури даних, наприклад, стек, чергу, словник, які можуть стати в нагоді для вирішення різних спеціальних завдань.
Велика частина класів колекцій міститься в просторах імен System.Collections (прості неузагальнених класи колекцій),System.Collections.Generic (узагальнені або типізовані класи колекцій) і System.Collections.Specialized (спеціальні класи колекцій). Також для забезпечення паралельного виконання завдань і многопоточного доступу застосовуються класи колекцій з простору імен System.Collections.Concurrent
Основою для створення всіх колекцій є реалізація інтерфейсів IEnumerator і IEnumerable (і їх узагальнених двійників IEnumerator  і IEnumerable ). Інтерфейс IEnumerator представляє нумератори, за допомогою якого стає можливий послідовний перебір колекції, наприклад, в циклі foreach. А інтерфейс IEnumerable через свій метод GetEnumerator надає Нумератор всіх класах, які реалізують даний інтерфейс. Тому інтерфейс IEnumerable ( IEnumerable ) є базовим для всіх колекцій.


Тут використовуються дві колекції: неузагальнених - ArrayList і узагальнена - List. Більшість колекцій підтримують додавання елементів.Наприклад, в даному випадку додавання проводиться методом Add , але для інших колекцій назву методу може відрізнятися. Також більшість колекцій реалізують видалення (в даному прикладі проводиться за допомогою методу RemoveAt ).

За допомогою властивості Count у колекцій можна подивитися кількість елементів.
І так як колекції реалізують інтерфейс IEnumerable / IEnumerable , то всі вони підтримують перебір в циклі foreach.
Конкретні методи і способи використання можуть відрізнятися від одного класу колекції до іншої, але загальні принципи будуть одні і ті ж для всіх класів колекцій.


Отже, клас ArrayList представляє колекцію об'єктів. І якщо треба зберегти разом різнотипні об'єкти - рядки, числа і т.д., то даний клас як раз для цього підходить.
По-перше, тому що клас ArrayList знаходиться в просторі імен System.Collections, то підключаємо його ( using System.Collections; ).
Спочатку створюємо об'єкт колекції через конструктор як об'єкт будь-якого іншого класу: ArrayList list = new ArrayList(); . При необхідності ми могли б так само, як і з масивами, виконати початкову ініціалізацію колекції, наприклад, ArrayList list = new ArrayList(){1, 2, 5, "string", 7.7};
Далі послідовно додаємо різні значення. Даний клас колекції, як і більшість інших колекцій, має два способи додавання: одиночного об'єкту через метод Add і набору об'єктів, наприклад, масиву або іншої колекції через метод AddRange
Завдяки тому, що в класі ArrayList реалізований інтерфейс IEnumerable, ми можемо пройтися по всіх об'єктом, що зберігаються в списку, через цикл foreach . І оскільки дана колекція зберігає різнорідні об'єкти, а не тільки числа або рядки, то в якості типу перебираються об'єктів обраний тип object: foreach (object o in list)
Багато колекцій, в тому числі і ArrayList, реалізують видалення за допомогою методів Remove / RemoveAt. В даному випадку ми видаляємо перший елемент, передаючи в метод RemoveAt індекс видаляється елемента.
На завершення ми знову ж виводимо елементи колекції на екран тільки вже через цикл for. В даному випадку з перебором колекцій справа йде так само, як і з масивами. А число елементів колекції ми можемо отримати через властивість Count
За допомогою індексатора ми можемо отримати за індексом елемент колекції так само, як і в масивах: object firstObj = list[0];

Заповнення масиву неповторючимися числами

Сортування лінійним методом (методом відбору)








вторник, 27 марта 2018 г.


Написати функцію, яка вертає середнє значення арифметичного двох переданих їй аргументів (параметрів).

В програмi створюється функція average (), що має два реальних параметра (c і d) і повертає також реальне значення. В тілі функцій обчислюється середня арiметр аргументів, вона присвоюється імені (ідентифікатору) функції. В мові програмування Pascal це означає, що присвоєння імені функції значення буде передано в основний розділ програми.
Задача
Опишіть функцію розрахунку f (x) за формулою:
f (x) = x ^ 2 при -2 <= x <2 2="" 4x="" 5="" x=""> = 2;
4 при х <-2 .="" f="" span="" x="">



Написати функцію, генерацію випадкових чисел



Описать процедуру знахождения по заданній довжині сторони трикутника і величинам двох прилеглих кутів довжин інших сторін трикутника і величини третього кута.


По відомим двох кутах трикутника і сторони між ними можна знайти інші сторони, використовуючи синусову теорію: відношення синусів кутів трикутника до довжин протилежних сторін рівними між собою. Для треугольника ABC отримуємо:
 A / BC = sin B / AC = sin C / AB.

звідси AC = (sin B * AB) / sin C,
BC = (sin A * AB) / sin C.

Якщо відомі два кути , то третій кут легко знайти, враховуючи, що сума кутів у трикутнику дорівнює 180 градусам.

В Паскалі функція sin () приймає кут виражений в радіанах. Щоб перевести градуси в радиани необхідно скористатися формулою:
рад = Кут * п / 180.


За допомогою підпрограмм заповнюємо матриці випадковими числами. Написати підпрограму, обчислюю сумму двох матриць. Вивести на екрани два вихідні матриці та їх сума (за допомогою процедури).





Написати функції для обчислення площ кругів, прямокутників і трикутників.





Написати функцію для обміну значень двох змінних

четверг, 22 марта 2018 г.

c#


Визначити суму квадратів всіх елементів масиву

static void Main(string[] args)
        {
            int n = 10, sum6 = 0, sumUser = 0;
            double sum = 0;
            int[] arr = new int[n];
 
            Console.Write("Введіть k1 = ");
            int k1 = int.Parse(Console.ReadLine());
            int k2 = 0;
            do
            {
                Console.Write("Введіть k2 = ");
                k2 = int.Parse(Console.ReadLine());
            }
            while(k2 < k1);
 
            Random rnd = new Random();
            Console.Write("Елементи: ");
            for (int i = 0; i < n; i++)
            {
                arr[i] = rnd.Next(0, 10);
                Console.Write(arr[i] + " ");
                sum += Math.Pow(arr[i], 2);
                if (i < 6)
                    sum6 += arr[i];
                if ((i >= k1) && (i <= k2))
                    sumUser += arr[i];
            }
 
            Console.Write("\nСума квадратів: " + sum);
            Console.Write("\nСума перших 6 елементів: " + sum6);
            Console.WriteLine("\nСума з k1 по k2: " + sumUser);
        }

Написати програму, яка по заданному натуральному числу визначає суму цифр у нім
string num = "546";
            int summ = 0;
            for (int i = 0; i < num.Length; i++)
                summ += int.Parse(num[i].ToString());
            Console.WriteLine(summ);
            Console.ReadKey();
Знайти суму елементів масиву: B = {1; 0; 4; -2; 16; 0,1; 1; 8; 90; 13}, що стоять на не парних позиціях, і замініть мінімальний елемент масиву на цю суму

 static void Main(string[] args)
        {
            double[] B = { 1, 0, 4, -2, 16, 0.1, 1, 8, 90, 13 };
            double Sum = 0, min=0;
            for (int i = 0; i < B.Length; i++)
            {
                if (i% 2 != 1) 
                    Sum += B[i];
                }
                if (min > B[i] || i == 0)
                {
                    min = B[i];
 
                }
            }
            for (int i = 0; i < B.Length; i++)
            {
                if (B[i] == min)
                {
                    B[i] = Sum;
                }
                Console.WriteLine(B[i]);
            }
            Console.Write("min = {0} ",min);
            Console.ReadLine();
 
        }

c#


По данному натуральному числу вирахуйте суму 1 + 2! +3! +. + N!

Console.Write("n=");             int n = int.Parse(Console.ReadLine());             long sum = 0, step = 1;             int i = 1;             while(i<=n)             {                 step *= i++;                 sum += step;             }             Console.WriteLine($"sum={sum}");


Знайти суму тих елементів масиву, які кратні для даного К.


namespace ConsoleApplication3
{
    class Program
    {
        static void Main() 
        {
            Console.Write("Введіть розмірність масиву ");
            int m = int.Parse(Console.ReadLine());
            int[] mas = new int[m];
            Console.Write("Введите k = ");
            int k = int.Parse(Console.ReadLine());
            Random rnd = new Random();
            for (int i = 0; i < m; i++)
            {
                mas[i] = rnd.Next(1, 20);
                Console.Write(mas[i] + " ");
            }
            Console.WriteLine();
            var summa = mas.Where(n => n % k == 0).Sum();
            Console.WriteLine("Сума елементів, кратних {0} = {1}", k, summa);
            Console.ReadKey();
        }
    }
}


Знайти суму квадратів елементів масиву Р і суми квадратів елементів масиву G


static int Sum(int n, int[] mass)
        {
            int res = 0;
            for (int i = 0; i < n; i++)
                res += mass[i] * mass[i];
            return res;
        }
 
        static void Main(string[] args)
        {
            int n = 0, m = 0;
            Random rnd = new Random();
            Console.Write("Розмірність масива P: ");
            n = int.Parse(Console.ReadLine());
            int[] P = new int[n];
            for (int i = 0; i < n; i++)
                P[i] = rnd.Next(0, 100);
            Console.Write("Размер массива G: ");
            m = int.Parse(Console.ReadLine());
            int[] G = new int[m];
            for (int i = 0; i < m; i++)
                G[i] = rnd.Next(0, 100);
            Console.WriteLine("Сума P: " + Sum(n, P));
            Console.WriteLine("Сума G: " + Sum(m, G));
        }

Користувач вводить одномірний масив цілих чисел, знайти суму елементів, які є парними
static void Main(string[] args)         {             int[] arr = new int[100];             int el = 0, sum = 0;             string test;             int count = 0;             Console.WriteLine("Введіть елементи масива");             while(true)             {                 test = Console.ReadLine();                 if (test == "end")                     break;                 else                     arr[el] = Convert.ToInt32(test);                 ++el; ++count;             }               Console.WriteLine("Массив: ");             for (int j = 0; j < count; j++)             {                 Console.Write("{0} ", arr[j]);             }               for (int i = 0; i < arr.Length; i++)             {                 if (arr[i] % 2 == 0)                     sum += arr[i];             }             Console.WriteLine("\nСума парних чисел рівна: " + sum);             Console.ReadLine();         }



Знайти суму елементів у тих стовпцях матриць, які не містять негативних елементів


using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
 
namespace Lab_Rab6_1
{
class Program
{
static void Main(string[] args)
{
int[,] msv = new int[5, 5];
Random r = new Random();
Console.WriteLine("===================================");
for (int i = 0; i < 5; i++)
{
for (int j = 0; j < 5; j++)
{
msv[i, j] = r.Next(-5, 15);
Console.Write(msv[i, j] + "\t");
}
Console.WriteLine();
}
for (int i = 0; i < 5; i++)
{
int count = 0; 
for (int j = 0; j < 5; j++)
{
if (msv[j, i] >= 0)
{
count++;
}
}
if (count == msv.GetLength(0)) //
for (int j = 0; j < 5; j++)
{
summa += msv[j, i];
}
Console.WriteLine("===================================");
Console.WriteLine("Сума елементів в {0} стовпці равна {1}", i + 1, summa);
}
}
Console.ReadKey();
}
}
}


Визначте суму елементів у тих рядках, які не містять негативних елементів


 static void Main(string[] args)
        {
            Random rnd = new Random();
            Console.WriteLine("Введите размер квадратной матрицы:");
            int m = int.Parse(Console.ReadLine());
            int[,] matrix = new int[m, m];
 
            Console.Write("Исходная матрица:\n\n");
            for (int i = 0; i < m; i++)
            {
                for (int j = 0; j < m; j++)
                {
                    matrix[i,j]=rnd.Next(-3,15);
                    Console.Write("{0}\t", matrix[i, j]);
                }
                Console.WriteLine("\n");
            } // выводим матрицуу на экран
 
            Console.WriteLine("\n=================================\n");
 
            int sum=0;
            for (int i = 0; i < m; i++)  //находим положительные элементы в строках и суммирукм их
            {
                sum = 0;
                for (int j = 0; j < m; j++)
                {
                    if (matrix[i, j] >= 0) sum += matrix[i, j];
                    else
                    {
                        sum = 0;
                        break;
                    }
                }
                if (sum != 0) Console.WriteLine("\nСумма элементов строки № {0} = {1}", i+1, sum);   
            }
 
            Console.WriteLine("\n=================================\n");
 
            int diagonal1=0, diagonal2=0, diagonal3=0, diagonal4=0;
 
 
            for (int k = 0; k < m - 2; k++)
            {
                diagonal1 += matrix[k, k + 2];
                diagonal4 += matrix[k + 2, k];
            }
            
            for (int k = 0; k < m - 1; k++)
            {
               diagonal2 += matrix[k, k + 1]; 
               diagonal3 += matrix[k + 1, k];
            }
 
            Console.WriteLine("Суммы диагоналей, параллельных главной диагонали матрицы:\n");
            Console.Write(diagonal1 + ", " + diagonal2 + ", " + diagonal3 + ", " + diagonal4 + "");
 
            int[] masD = { diagonal1, diagonal2, diagonal3, diagonal4 };
            int min = masD.Min();
 
            Console.WriteLine("\n\nМинимум среди сумм элементов диагоналей, параллельных главной диагонали матрицы: {0}", min);
 
            Console.ReadKey();
        }



Із введенного текста роздруковувати тільки ті слова, які є симметричними (RADAR, ANNA), або в яких букв упорядковані в порядку, зворотному алфавітному (TOK, ZONA).
static void Main(string[] args)
        {
            Console.WriteLine("Введіть строку");
            Console.WriteLine();
            string s = Console.ReadLine();
                        string[] str = s.Split(' ');
                  
            for (int i = 0; i < str.Length; i++)
            {
                Console.Write(str[i]);
                string st=str[i];
                if (st[0] == st[st.Length - 1])
                Console.Write(" - умова виконується");
                Console.WriteLine("");
            }
            Console.ReadKey();
        }

Ввести рядок, в яку можуть входити тільки цифри і букви. Роздрукувати ті групи букв, 
в яких 'A' 
зустрічається не менше двох разів. (Група букв - це послідовність букв, обрамлена цифрами)

var s = "...";
var arr = Regex.Split(s, @"\d+").Where(p => p.ToCharArray().Count(ch => ch == 'A') > 1);
foreach (var i in arr)
    Console.WriteLine(i);


Якщо в командному рядку задана опція-в, то вводиться в нижній регістр літери перетворені 
в букви верхнього регістру. При указании опций -l реалізувати зворотне перетворення.


static void Main(string[] args)
        {
            char EnteredSymbol;
 
            if (args.Length == 0)
            {
                Console.WriteLine("Please use -u or -l parameters.");
                Console.ReadKey(true);
                return;
            }
            
            if (args[0] == "-u")
            {
                EnteredSymbol = Console.ReadKey(true).KeyChar;
                
                while(EnteredSymbol != (char)Keys.Escape)
                {
                    Console.Write(Char.ToUpper(EnteredSymbol));
                    EnteredSymbol = Console.ReadKey(true).KeyChar;
                }
            }
            
            else if (args[0] == "-l")
            {
                EnteredSymbol = Console.ReadKey(true).KeyChar;
 
                while (EnteredSymbol != (char)Keys.Escape)
                {
                    Console.Write(Char.ToLower(EnteredSymbol));
                    EnteredSymbol = Console.ReadKey(true).KeyChar;
                }
            }
            
            else
            {
                Console.WriteLine("There is no such a parametr. Use -u or -l parameters.");
                Console.ReadKey(true);
            }
        }
з введенного текста роздруковувати тільки ті слова, які є симметричними (RADAR, ANNA),
 або в яких букв упорядковані в порядку, зворотному алфавітному (TOK, ZONA).

class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine("Enter line of words:");
            string s = Console.ReadLine();
            //разлож. строку на массив слов
            string[] str = s.Split(' ');
            
            //проверка каждого слова массива на выполнение условия симметричности
            Console.WriteLine("\nSymmetric words:");
            for (int i = 0; i < str.Length; i++)
            {
                if (str[i] == ReverseStringBuilder(str[i]))
                    Console.WriteLine(str[i]);
            }
 
            //проверка каждого слова массива на выполнение условия обратного порядка алфавита
            Console.WriteLine("\nInverse alphabetic order words:");
            for (int i = 0; i < str.Length; i++)
            {
                if (IsInverseAlphabeticOrder(str[i]))
                    Console.WriteLine(str[i]);
            }
 
            Console.ReadKey();
        }
 
        static String ReverseStringBuilder(String str)
        {
            StringBuilder sb = new StringBuilder(str.Length);
            for (int i = str.Length - 1; i >= 0; i--)
                sb.Append(str[i]);
            return sb.ToString();
        }
 
        static bool IsInverseAlphabeticOrder(string str)
        {
            for (int i = 1; i < str.Length; i++)
            {
                if (Char.ToUpper(str[i]) > Char.ToUpper(str[i - 1]))
                    return false;
            }
            return true;
        }
    }


Написати і протестувати функцію STRS (str1, str2), 
яка визначає, зустрічається в рядку str1 будь-який символ з рядка str2.

class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine("Please enter the first word:");
            string s1 = Console.ReadLine();
            Console.WriteLine("Please enter the second word:");
            string s2 = Console.ReadLine();
 
            STRS(s1, s2);
 
            Console.ReadKey();
        }
 
        static void STRS(string str1, string str2)
        {
            for (int i = 0; i < str1.Length; i++)
                for (int j = 0; j < str2.Length; j++)
                {
                    if (str1[i] == str2[j])
                        Console.WriteLine("there is '" + str2[j] + "' letter from the second word in first word");
                }
        }