Написать программу, которая, реализует диалог с пользователем:
|
Запрашивает с клавиатуры два целых числа, и выводит на экран сумму данных чисел в прямом и обратном порядке: a=12, b=34, 12+34=34+12
| using System;
namespace ConsoleApp1
{
class Program
{
static void Main()
{
Console.Write("a=");
int a = Convert.ToInt32(Console.ReadLine());
Console.Write("b=");
int b = Convert.ToInt32(Console.ReadLine());
Console.WriteLine("{0} + {1} = {1} + {0}", a, b);
Console.WriteLine();
}
}
}
|
I. Написать программу, которая подсчитывает:
|
Расстояние между точками с координатами a, b и с, d;
| using System;
namespace ConsoleApp2
{
class Program
{
static void Main()
{
double a, b, c, d, sum;
double sum1;
Console.WriteLine("Введите a");
a = Convert.ToDouble(Console.ReadLine());
Console.WriteLine("Введите b");
b = Convert.ToDouble(Console.ReadLine());
Console.WriteLine("Введите c");
c = Convert.ToDouble(Console.ReadLine());
Console.WriteLine("Введите d");
d = Convert.ToDouble(Console.ReadLine());
sum = Math.Sqrt(Math.Pow(a - b, 2));
sum1 = Math.Sqrt(Math.Pow(c - d, 2));
Console.WriteLine("расстояние между точками а и b=" + " " + sum);
Console.WriteLine("расстояние между точками c и d=" + " " + sum1);
}
}
}
|
II. Написать программу, которая определяет:
|
Является ли заданное целое число нечетным;
| using System;
namespace ConsoleApp2
{
class Program
{
static void Main()
{
int i;
Console.Write("i= ");
i = int.Parse(Console.ReadLine());
if (i % 2 == 0)
{
Console.WriteLine("Четное");
}
else
{
Console.WriteLine("Нечетное");
}
Console.WriteLine();
}
}
}
|
III. Следующие задания выполните для натурального трехзначного числа, если номер задания четный и для натурального четырехзначного, если номер нечетный.
|
В числе Х поменяли местами две последние цифры, старшую цифру уменьшили в два раза. Получилось число У. Зная значение числа У, найдите исходное число Х.
| using System; namespace ConsoleApp8
{
class Program
{
static void Main(string[] args)
{
Console.WriteLine("y=");
int y = int.Parse(Console.ReadLine());
int c = y % 10;
y = y / 10;
int b = y % 10;
int a = y / 10;
int x = 100 * a + 10 * c + b;
Console.WriteLine("x={0}", x);
}
}
}
|
I. Для произвольных значений аргументов вычислить значение функции, заданной следующим образом:
|
| using System; namespace ConsoleApp4
{
class Program
{
static void Main()
{
Console.Write("x= ");
double x = double.Parse(Console.ReadLine());
if (x == 0 || x < -1)
{
Console.WriteLine("Функция не определена");
}
else
{
double y = 1 / x + Math.Pow(x, 2) - 1;
Console.WriteLine("y({0:f2})={1:f2}", x, y); }
}
}
}
|
II. Дана точка на плоскости с координатами (х, у). Составить программу, которая выдает одно из сообщений «Да», «Нет», «На границе» в зависимости от того, лежит ли точка внутри заштрихованной области, вне заштрихованной области или на ее границе. Области задаются графически следующим образом:
|
|
|
III. Составить программу. Замечание. При решении данных задач можно использовать как оператор switch, так и вложенные операторы if. Свой выбор обоснуйте
|
Дан номер масти m (1≤m≤4), определить название масти. Масти нумеруются: «пики» - 1, «трефы» - 2, «бубны» - 3, «червы» - 4.
|
|
IV. Вывести на экран. При решении задачи можно использовать любой из операторов цикла while, do while и for. Свой выбор обоснуйте
|
Квадраты всех четных чисел из диапазона от А до В (А≤В);
| using System;
namespace ConsoleApp7
{
class Program
{
static void Main()
{
Console.Write("a= ");
int a = int.Parse(Console.ReadLine());
Console.Write("b= ");
int b = int.Parse(Console.ReadLine());
int i;
Console.Write(" ");
a = (a % 2 == 0) ? a : a + 1;
for (i = a; i <= b; i += 2)
{
Console.Write(" {0}", i * i);
}
}
}
}
|
V. Вывести на экран числа следующим образом:
|
1 2 3 … 10
1 2 3 … 10
1 2 3 … 10
1 2 3 … 10
| using System;
namespace ConsoleApp8
{
class Program
{
static void Main()
{
for (int i = 1; i <= 4; ++i)
{
Console.Write("1 2 3 4 5 6 7 8 9 10");
Console.WriteLine();
}
}
}
}
|
VI. Постройте таблицу значений функции y=f(x) для х[a, b] с шагом h.
|
| using System; namespace ConsoleApp9
{
class Program
{
static void Main()
{
Console.Write("a= ");
double a = double.Parse(Console.ReadLine());
Console.Write("b= ");
double b = double.Parse(Console.ReadLine());
Console.Write("h= ");
double h = double.Parse(Console.ReadLine());
double y;
int i = 1;
for (double x = a; x <= b; x += h, ++i)
{
if (Math.Abs(x) < 3)
{
y = Math.Sin(x);
Console.WriteLine("{0} {1:f2}", i, y);
}
else
{
if (3 <= Math.Abs(x) && Math.Abs(x) < 9)
{
y = (Math.Sqrt(Math.Pow(x, 2) + 1) / (Math.Pow(x, 2) + 5));
Console.WriteLine("{0} {1:f2}", i, y);
}
else
{
if (Math.Abs(x) >= 9)
{
y = (Math.Sqrt(Math.Pow(x, 2) + 1) - Math.Sqrt(Math.Pow(x, 2) + 5));
Console.WriteLine("{0} {1:f2}", i, y);
}
}
}
}
Console.ReadLine();
}
}
}
|
II. Использование базовых алгоритмов при разработке методов
|
Разработать метод, который для заданного натурального числа N возвращает количество его делителей. С помощью данного метода
|
a) для каждого целого числа на отрезке [a, b] вывести на экран количество делителей; static void Main()
{
Console.Write("n: ");
uint n=uint.Parse(Console.ReadLine());
for (uint i=1; i<=n; ++i)
{
if (n%i==0)
{
Console.Write("{0} ", i);
}
}
}
| using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace DividersApp
{
class Program
{
static void Main(string[] args)
{
Console.Write("Введите числа а и b через пробел: ");
int[] range = range = Console.ReadLine().Split(' ').Select(n => int.Parse(n)).ToArray();
List _dividers = new List();
for (int i = range[0]; i <= range[1]; i++)
{
_dividers.Add(new CDividers(i));
}
Console.WriteLine("Для каждого целого числа на отрезке [a, b] вывести на экран количество делителей:");
foreach (CDividers div in _dividers)
{
Console.WriteLine(div.ToString());
}
Console.WriteLine("Вывести на экран только те целые числа отрезка [a, b], у которых количество делителей равно заданному числу:");
foreach (CDividers div in _dividers)
{
if (div.Dividers.Length == div.Num) Console.WriteLine(div.ToString());
}
Console.WriteLine("Вывести на экран только те целые числа отрезка [a, b], у которых количество делителей максимально:");
CDividers _div = _dividers.OrderByDescending(d => d.Dividers.Length).First();
Console.WriteLine(_div.ToString());
Console.WriteLine("Для заданного числа А вывести на экран ближайшее следующее по отношению к нему число, имеющее столько же делителей, сколько и число А:");
Console.Write("Введите число А: ");
int A = int.Parse(Console.ReadLine());
bool finded = false;
foreach (CDividers div in _dividers)
{
if (div.Num >= A && div.Dividers.Length == A)
{
Console.WriteLine(div.ToString());
finded = true;
break;
}
}
if (!finded) Console.WriteLine("Подходящие числа отсутствуют.");
Console.ReadKey();
}
}
public class CDividers
{
public int Num { get; private set; }
public int[] Dividers { get; private set; }
public bool HaveDividers { get; private set; }
public CDividers(int num)
{
Num = num;
Dividers = GetDividers(num);
if (Dividers.Length > 0) HaveDividers = true;
}
private int[] GetDividers(int num)
{
List dividers = new List();
for (int i = 1; i <= (num / 2 > 2 ? num / 2 : 2); i++)
{
if (num % i == 0 && num != i) dividers.Add(i);
}
dividers.Add(num);
return dividers.ToArray();
}
public override string ToString()
{
if (!HaveDividers) return String.Format("Число {0} не имеет делителей\r\n", Num);
StringBuilder sb = new StringBuilder();
sb.AppendLine(String.Format("Число: {0}", Num));
sb.Append("Делители: ");
foreach (int div in Dividers)
{
sb.Append(div + " ");
}
sb.AppendLine();
return sb.ToString();
}
}
}
|
b) вывести на экран только те целые числа отрезка [a, b], у которых количество делителей равно заданному числу;
|
|
c) вывести на экран только те целые числа отрезка [a, b], у которых количество делителей максимально;
|
|
d) для заданного числа А вывести на экран ближайшее следующее по отношению к нему число, имеющее столько же делителей, сколько и число А.
|
|
2. В разделе «Алгоритмы вычисления корня n-ой степени» мы рассмотрели алгоритм, который позволяет итерационным методом вычислить n√𝐴, где A – произвольное положительное вещественное число, n – натуральное число. Проведите сравнительный анализ программной реализации данного алгоритма и стандартного метода Math.Pow(А, 1.0/n). Данные представьте в следующей таблице:
Укажите характеристики компьютера, на котором проводились измерения. Проведите анализ входных значений, представленных в таблице, а также анализ полученных результатов. Сделайте вывод о том, какой алгоритм работает быстрее и почему. Предложите способы оптимизации программных реализаций алгоритмов, если это возможно.
|
№ алгоритма
| Значения x и n
| 1 и 10
| 2 и 41
| 3 и 124
| 2.1 и 5
| 6.2 и 20
| 123456789 и 3
| 1234567890123.234 и 17
| Итерационный алгоритм
| 1,250503519876339
| 3,938902755324906
| 1,0089422300634696
| 1,1613075948354505
| 1,0961625709918437
| 497,93385921822545
|
| Стандартный метод
|
|
|
|
|
|
|
|
|
using System; namespace ConsoleApp6
{
class Program
{
static void Main()
{
Console.Write("а= ");
double a = double.Parse(Console.ReadLine());
Console.Write("n= ");
byte n = byte.Parse(Console.ReadLine());
Console.Write("e= ");
double e = double.Parse(Console.ReadLine());
double x0 = a / n;
double x = ((n - 1) * x0 + a / Math.Pow(x0, n - 1)) / n;
while (Math.Abs(x0 - x) >= e)
{
x0 = x;
x = ((n - 1) * x0 + a / Math.Pow(x0, n - 1)) / n;
}
Console.WriteLine("x= {0}", x);
}
}
}
|
|
I. Дана последовательность целых чисел. Задачи из данного пункта решить двумя способами, используя одномерный массив, а затем двумерный. Размерность массива вводится с клавиатуры.
|
Заменить все элементы, меньшие заданного числа, этим числом.
| using System;
namespace ConsoleApp7
{
class Program
{
static void Main(string[] args)
{
Console.WriteLine("Введите искомое число: ");
int n = Convert.ToInt32(Console.ReadLine());
int[] a = new int[] { 1, 2, 4, 7, 8, 12, 5 };
for (int i = 0; i < a.Length; i++)
{
Console.Write(a[i] + " ");
if (a[i] < n) a[i] = n;
}
Console.WriteLine();
Console.WriteLine("Преобразованный массив: ");
for (int i = 0; i < a.Length; i++)
{
Console.Write(a[i] + " ");
} Console.WriteLine();
}
}
}
|
using System;
namespace ConsoleApp7
{
class Program
{
static void Main(string[] args)
{
Console.WriteLine("Введите искомое число: ");
int n = Convert.ToInt32(Console.ReadLine());
int[,] a = new int[5, 5];
Random rand = new Random();
for (int i = 0; i < 5; i++)
{
for (int j = 0; j < 5; j++)
{
a[i, j] = rand.Next(0, 15);
Console.Write(a[i, j] + " ");
if (a[i, j] < n) a[i, j] = n;
}
Console.WriteLine();
}
Console.WriteLine();
Console.WriteLine("Преобразованный массив: ");
for (int i = 0; i < 5; i++)
{
for (int j = 0; j < 5; j++)
{
Console.Write(a[i, j] + " ");
}
Console.WriteLine();
}
Console.WriteLine();
}
}
}
|
II. Дана последовательность из n действительных чисел. Задачи из данного пункта решить, используя одномерный массив
|
Вывести на экран номера всех минимальных элементов.
| using System;
namespace ConsoleApp7
{
class Program
{
static void Main(string[] args)
{
int[] a = { 1, 256, 23, 45, 78, 38, 2234, 10, };
int min = int.MaxValue;
for (int i = 0; i < a.Length; i++)
{
if (a[i] < min)
min = a[i];
}
Console.WriteLine("Минимальный элемент массива: " + min);
Console.WriteLine();
}
}
}
|
III. Дан массив размером n×n, элементы которого целые числа. При решении задач из данного пункта использовать двумерные или ступенчатые массивы
|
Подсчитать среднее арифметическое четных элементов, расположенных ниже главной диагонали
| using System;
namespace ConsoleApp7
{
class Program
{
static void Main(string[] args)
{
Console.Write("Какой размер массива : ");
int n = Convert.ToInt32(Console.ReadLine());
int[,] myArray_2 = new int[n, n];
Random rnd = new Random();
for (int i = 0; i < n; i++)
{
Console.WriteLine();
for (int j = 0; j < n; j++)
{
myArray_2[i, j] = rnd.Next(10);
Console.Write("{0} ", myArray_2[i, j]);
}
}
int Average = 0, del = 1;
for (int i = 0; i < n; i++)
{
for (int j = 0; j <= i; j++)
if (myArray_2[i, j] % 2 == 0)
{
Average += myArray_2[i, j];
del++;
}
}
Console.WriteLine("\nОтвет: {0}", Average / del);
Console.WriteLine();
}
}
}
|
IV. Дан массив размером n×n, элементы которого целые числа. Для хранения массив n×n использовать двумерный или ступенчатый массив.
|
Найти минимальный элемент в каждом столбце и записать данные в новый массив.
| using System;
namespace ConsoleApp7
{
class Program
{
static void Main(string[] args)
{
Console.Write("Сколько ступенек будет в массиве : ");
int n = Convert.ToInt32(Console.ReadLine());
int[][] myArray_1 = new int[n][];
int[] minArray = new int[n];
Random rnd = new Random(); for (int i = 0; i < myArray_1.Length; i++)
{
Console.WriteLine();
myArray_1[i] = new int[i + 1];
for (int j = 0; j <= i; j++)
{
myArray_1[i][j] = rnd.Next(10);
Console.Write(myArray_1[i][j] + " ");
}
}
int min = 0;
for (int i = 0; i < myArray_1.Length; i++)
{
min = myArray_1[i][0];
for (int j = 0; j <= i; j++)
{
if (min >= myArray_1[i][j])
min = myArray_1[i][j];
}
minArray[i] = min;
}
Console.WriteLine("\n Минимальные Элементы ");
foreach (int value in minArray)
Console.Write("{0} ", value);
Console.WriteLine();
}
}
}
|
V. В одномерном массиве, элементы которого – целые числа, произвести следующие действия:
|
Удалить из массива все максимальные элементы.
| using System;
using System.Collections;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace ConsoleApp7
{
class Program
{
static void Main(string[] args)
{
int N = int.Parse(Console.ReadLine());
List lst = new List(N);
for (int i = 0; i < N; i++)
{
Console.WriteLine("элемент массива номер " + (i + 1) + ":");
lst.Add(Convert.ToInt32(Console.ReadLine()));
}
Console.Write("Массив:");
foreach (int x in lst)
{
Console.Write(x + " ");
}
Console.WriteLine();
int max = lst.Max();
Console.WriteLine("максимальный элемент массива= " + max);
lst.Remove(max);
Console.WriteLine("Массив без максимального элемента: ");
foreach (int x in lst)
{
Console.Write(x + " ");
}
Console.WriteLine();
}
}
}
|
VI. В массиве размером n×n, элементы которого – целые числа, произвести следующие действия: Для хранения массив n×n использовать двумерный или ступенчатый массив.
|
Вставить новый столбец после столбца, в котором нет ни одного отрицательного
элемента
|
|
8. I. Разработать программу, которая для заданной строки s: При решении задач использовать тип string.
|
определяет, какой из двух заданных символов встречается чаще в строке;
string
| using System;
using System.Linq;
namespace ConsoleApp7
{
class Program
{
static void Main(string[] args)
{
Console.WriteLine("Введите строку: ");
string line = Console.ReadLine();
Console.WriteLine("Исходная строка: " + line);
Console.WriteLine("Введите символ x: ");
char x = char.Parse(Console.ReadLine());
Console.WriteLine("Введите символ y: ");
char y = char.Parse(Console.ReadLine()); int countX = line.Where(a => a == x).Count();
int countY = line.Where(a => a == y).Count();
string result = "Символ '{0}' встречается чаще в строке."; if (countX > countY)
Console.WriteLine(result, x);
else if (countY > countX)
Console.WriteLine(result, y);
else
Console.WriteLine("Символы '{0}' и '{1}' встречаются одинаковое количество раз в строке.", x, y); Console.WriteLine();
}
}
}
|
II. Разработать программу, которая для заданной строки s:
|
вставляет подстроку x после каждого вхождения подстроки y; StringBuilder
| Static void Main()
{
StringBuilder str = new StringBuilder (“кол около колокола");
StringBuilder x = new StringBuilder (“кол");
StringBuilder y = new StringBuilder (“!!!”);
Int n = indexOf (str,x,0);
While (n !=-1)
{
Str.Insert (n+x.Lenght,y);
n = IndexOf (str,x,n+x.Length + y.Length);
}
Console.WriteLine(str);
}
|
III. Дана строка, в которой содержится осмысленное текстовое сообщение. Слова сообщения разделяются пробелами и знаками препинания.
|
Вывести только те слова сообщения, которые содержат не более чем n букв.
|
|
9. I. Работа с символьными потокам.
|
Дан текстовый файл. Найти количество строк, которые начинаются и заканчиваются одной буквой.
| using System;
using System.Text;
using System.IO;
using System.Text.RegularExpressions;
namespace MyProgram
{
class Program
{
static void Main()
{
using (StreamReader sr = new StreamReader("c:/text.txt"))
{
Console.Write("Введите заданную букву: ");
char a = char.Parse(Console.ReadLine());
StreamReader fileIn = new StreamReader("text.txt");
string text = fileIn.ReadToEnd(); //считываем из файла весь текст
fileIn.Close();
int k = 0;
string[] newText = Regex.Split(text, "[ ,.:;]+");
foreach (string b in newText)
if (b[0] == b[b.Length - 1])
++k;
Console.WriteLine("k= " + k);
}
}
}
}
|
II. Работа с символьными потоками.
|
Дан файл f, компонентами которого являются целые числа. Переписать все отрицательные числа в файл g, положительные – в файл h.
| using System;
using System.Text;
using System.IO;
using System.Text.RegularExpressions;
{
class Program
{
static void Main()
{
int i = 0;
using (StreamReader fileIn = new StreamReader("c:/f.txt"))
using (StreamReader fileOut = new StreamReader("c:/g.txt"))
using (StreamReader fileOut1 = new StreamReader("c:/h.txt"))
{
if (i >= 0)
{
fileOut;
}
else
{
fileOut1.;
|
|
|
|
|
|
|
|
|
|
|
|
|