Файл: Листинг кода домашних работ 3 варианта на языке С#.docx
ВУЗ: Омский государственный технический университет
Категория: Решение задач
Дисциплина: Программирование
Добавлен: 12.02.2019
Просмотров: 373
Скачиваний: 5
Министерство образования Российской Федерации
ФГБОУ ВО «Омский государственный технический университет»
Кафедра «Информатика и вычислительная техника»
Пояснительная записка к расчетно-графической работе
По дисциплине «Проектирование и тестирование ПО»
на тему:
«Листинг кода домашних работ 3 варианта на языке С#»
Выполнил: ст.гр. ИСТ-151
Калекин Д. В.
Омск 2017
Далее представлены задачи с 1 по 9. Выполнено не только условие задачи, но и защита от некорректного ввода данных.
ЗАДАЧА 1. РАБОТА С ЧИСЛАМИ
Определить количество повторений каждой из цифр 1,2,...,9 в числе N^N (N в степени N), N <= 1000.
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Numerics;
namespace lab1_1_voron_3var {
class Program{
static void Main(string[] args) {
bool repeat = true;
do {
try {
Console.WriteLine("Введите число N в диапозоне от 1 до 1000");
var number = int.Parse(Console.ReadLine());
Console.WriteLine("N = " + number);
if (number < 1 || number > 1000) {
WrongNumberException2 we = new WrongNumberException2();
throw we;
}
BigInteger powedNumber = number;
for (int i = 0; i < number; i++)
powedNumber = number * number;
Console.WriteLine("N^N = " + powedNumber);
var numberCounter = new int[10];
while (powedNumber != 0) {
var index = (int) (powedNumber % 10);
numberCounter[index]++;
powedNumber /= 10;
}
for (var i = 1; i < numberCounter.Count(); i++)
Console.WriteLine("Число - " + i + ", повторений - " + numberCounter[i]);
Console.ReadLine();
repeat = false;
}
catch (WrongNumberException2 ex) {
Console.WriteLine("Ошибка: " + "N должно быть в диапозоне от 1 до 1000, ай-яй-яй!");
Console.ReadLine();
repeat = true;
}
catch (Exception ex) {
Console.WriteLine("Ошибка: " + ex.Message);
Console.ReadLine();
repeat = true;
} } while (repeat);
} } }
ЗАДАЧА 2. РАБОТА СО СТРОКАМИ
Дана строка-предложение на русском языке. Преобразовать строку так, чтобы каждое слово начиналось с заглавной буквы.
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace lab1_2_voron_3var {
class Program {
static string UCFirst(string s) {
return s.Substring(0, 1).ToUpper() + s.Substring(1, s.Length-1);
}
static void Main(string[] args) {
String str = "Ах вот если бы да кабы ратный подвиг совершить! Мне бы только знамя шить.";
string[] elems = str.Split(new char[] { ' ' }); //new char[]{' ', ',', '!', '?', '.'}
for (int i = 0; i < elems.Length; i++) {
elems[i] = UCFirst(elems[i]);
}
Console.WriteLine("GO: "+string.Join(" ", elems));
Console.ReadLine();
Console.WriteLine("До: {0}", str);
char[] split = str.ToCharArray();
for (int n = 1; n < split.Length; n++)
if (split[n - 1] == ' ')
if (split[n] == 'ё') split[n] = 'Ё';
else split[n] = Convert.ToChar(Convert.ToInt32(split[n]) - 32);
String temp = new String(split);
Console.WriteLine("После: {0}", temp);
Console.ReadKey();
}}}
ЗАДАЧА 3. ПОИСК В МАССИВЕ
Дан целочисленный массив размера N. Определить максимальное количество его одинаковых элементов.
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Lab3_voronina {
class Program {
static void Main(string[] args) {
int str;
Console.WriteLine("Введите размерность массива:");
str = Convert.ToInt32(Console.ReadLine());
int[] a = new int[str];
Console.Clear();
Random ran = new Random();
for (int i = 0; i < str; i++) {
a[i] = ran.Next(-15, 15);
Console.Write("{0}\t", a[i]);
Console.WriteLine();
}
Dictionary<int, int> dict = a.GroupBy(x => x).ToDictionary(x => x.Key, x => x.Count());
var max = dict.Aggregate((l, r) => l.Value > r.Value ? l : r);
if (max.Value == 1) {
Console.WriteLine("Повторений не найдено");
}
else
Console.WriteLine("Больше всего встречается {0} - {1} раз", max.Key, max.Value);
Console.WriteLine();
Console.ReadLine();
}}}
ЗАДАЧА 4. ПЕРЕСТАНОВКА
Пользователь вводит массив: 2 3 4 1 7 9 12 8 9 10. Переставить элементы массива таким образом, чтобы суммы двух его частей отличались не более чем в 1,5 раза. Если этого сделать нельзя, то указать это.
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Text.RegularExpressions;
namespace DZ_4 {
class Program {
static void Main(string[] args) {
int[] arr1 = { 2, 3, 4, 1, 7, 9, 21, 8, 9, 1 };
int[] ms1 = new int[5]; int[] ms2 = new int[5]; double s = 1.5;
arr1 = arr1.OrderBy(n => Guid.NewGuid()).ToArray(); //рандомная перестановка элементов массива
for (int i = 0; i < arr1.Length / 2; i++) {
ms1[i] = arr1[i]; ms2[i] = arr1[i + arr1.Length / 2];
}
for (int j = 0; j < ms1.Length; j++) {
Console.Write(ms1[j] + " ");
}
Console.Write( "\n");
for (int j = 0; j < ms1.Length; j++) {
Console.Write(ms2[j] + " ");
}
int summa1 = 0; int summa2 = 0;
for (int i = 0; i < ms1.Length; ++i) {
summa1 = summa1 + ms1[i];
}
for (int i = 0; i < ms2.Length; ++i) {
summa2 = summa2 + ms2[i];
}
Console.WriteLine("\n");
if (summa1/summa2 >= s || summa2 / summa1 >=s) {
Console.WriteLine("Summa ms1 " + summa1 + "\n");
Console.WriteLine("Summa ms2 " + summa2 + "\n");
Console.WriteLine("Sorry, maybe another time! \n");
}
еlse {
Console.WriteLine("Summa ms2 " + summa2 + "\n");
Console.WriteLine("Summa ms1 " + summa1 + "\n");
}
Console.ReadKey();
}}}
ЗАДАЧА 5 .ВСТАВКА В МАССИВ
Дан массив размера N. Вставить ноль после каждого четного элемента и осуществить циклический сдвиг элементов массива вправо на одну позицию.
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace DZ_5 {
class Program {
static void Main(string[] args) {
int str;
Console.WriteLine("Enter the number of elements in the array, please: ");
str = Convert.ToInt32(Console.ReadLine());
int[] arr = new int[str];
int[] arr2 = new int[str];
Console.Clear();
Random ran = new Random();
for (int i = 0; i < str; i++) {
arr[i] = ran.Next(-15, 15);
Console.Write("{0}\t", arr[i]);
Console.WriteLine();
}
Console.Write(" \n");
Console.Write(" Original : \n");
Console.WriteLine(String.Join(" ", arr));
for (int i = 0; i < arr.Length; i++) {
if (arr[i] % 2 == 0) {
Array.Resize(ref arr, arr.Length + 1);
for (int j = arr.Length - 1; j > i; j--) {
arr[j] = arr[j - 1];
}
arr[i + 1] = 0; i += 1;
}}
Console.Write(" With 0 : \n");
Console.WriteLine(string.Join(" ", arr));
Console.Write(" With cyclic shift: \n");
Console.WriteLine(string.Join(" ", RightShift(arr, 1)) + "\r\n");
Console.Write(" \n");
Console.ReadKey();
}
static int[] RightShift(int[] arr, int count) {
count = count % arr.Length;
int[] tmp = new int[arr.Length];
for (int i = arr.Length - 1; i >= 0; i--)
tmp[i] = arr[(i - count + arr.Length) % arr.Length];
return tmp;
}}}
ЗАДАЧА 6. УДАЛЕНИЕ ИЗ МАССИВА
Дан целочисленный массив размера N. Назовем серией группу подряд идущих одинаковых элементов, а длиной серии — количество этих элементов (длина серии может быть равна 1). Заменить серию, длина которой больше 3 , на один нулевой элемент.
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace numbers {
class Program {
static void Main(string[] args) {
IList<int> answer = new List<int>();
Console.WriteLine("В каждой строчке напишите числа массива");
String currentLine;
while ((currentLine = Console.ReadLine()) != "") {
answer.Add(Convert.ToInt32(currentLine));
}
int lenght = 1;
for (int i = 0; i < answer.Count-1; i++) {
int temp = answer.ElementAt(i);
if (temp == answer.ElementAt(i + 1)) {
lenght++;
}
еlse {
if (lenght > 3) {
for (int g = i; g > i - lenght; g--) {
if (g == i - lenght + 1) {
List<int> first = new List<int>();
for (int a = 0; a < g; a++) {
first.Add(answer.ElementAt(a));
}
first.Add(0);
List<int> second = new List<int>();
for (int a = g + 1; a < answer.Count; a++) {
second.Add(answer.ElementAt(a));
}
first.AddRange(second);
answer = first;
}
еlse {
answer.RemoveAt(g);
}}}
lenght = 1;
}}
for (int i = 0; i < answer.Count; i++){
Console.WriteLine(answer.ElementAt(i));
}
Console.ReadKey();
}}}
ЗАДАЧА 7. ПОИСК И ПЕРЕСТАНОВКА В ДВУМЕРНОМ МАССИВЕ
Найти количество цифр, встречающихся в четных элементах массива больше одного раза и количество цифр в нечетных элементах массива, встречающихся больше одного раза. Определить, чего больше и вывести эти цифры с количеством.
using System;
namespace DZ_7 {
class Program {
static void Main(string[] args) {
Boolean chet = false;
int[] ChetNumber = new int[10]; int[] NeChetNumber = new int[10]; String number;
while ((number = Console.ReadLine())!= ""){
int temp = Convert.ToInt32(number);
if(temp < 10 && temp > -1){
if(chet) {
ChetNumber[temp]++;
}
else {
NeChetNumber[temp]++;
}}}
int chetcount = 0; int nechetcount = 0;
for(int I = 0; I < 10; I++){
if (ChetNumber[I]>1) {
chetcount++;
}
if (NeChetNumber[I]>1) {
nechetcount++;
}}
if (chetcount>nechetcount){
for(int i=0; i < ChetNumber.Length; i++){
if (i > 1){
Console.Write("{0}\t", ChetNumber[i]);
}}}
if (chetcount < nechetcount){
for (int i = 0; i < ChetNumber.Length; i++){
if (i > 1){
Console.Write("{0}\t", NeChetNumber[i]);
}}}
Console.WriteLine();
}}}
ЗАДАЧА 8. ВСТАВКА И УДАЛЕНИЕ В ДВУМЕРНОМ МАССИВЕ
Добавить в массив столбец нулей 0 после каждого столбца с элементом, большим по модулю среднего арифметического положительных элементов.
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace DZ_8{
class Program{
static void Main(string[] args){
Console.OutputEncoding = Encoding.UTF8;
Console.Write("Введите количество столбцов: ");
int columns = Convert.ToInt32(Console.ReadLine());
while (columns < 1){
Console.Write("Введите значение больше 0: ");
columns = Convert.ToInt32(Console.ReadLine());
}
Console.Write("Введите количество строк: ");
int rows = Convert.ToInt32(Console.ReadLine());
while (rows < 1){
Console.Write("Введите значение больше 0: ");
rows = Convert.ToInt32(Console.ReadLine());
}
List<int> EmptyRow = makeZeroColumn(rows); //столбец нулей
List<List<int>> list = makeRandomList(rows, columns);
outputList(rows, list);
double average = calcAvgOfPositive(list);
if (average != 0){
Console.WriteLine("Средние значение положительных элементов равно = " + average);
for (int i = 0; i < list.Count; i++){
if (list[i].Exists(value => Math.Abs(value) > average)){
list.Insert(i + 1, EmptyRow);
}
}
Console.WriteLine("Выводим новый массив");
outputList(rows, list);
}
else Console.WriteLine("Нет положительных элементов.");
while (Console.ReadKey().Key != ConsoleKey.Escape) ;
}
private static void outputList(int rows, List<List<int>> list){
for (int rowIndex = 0; rowIndex < rows; rowIndex++) //вывод массива{
for (int columnIndex = 0; columnIndex < list.Count; columnIndex++){
Console.Write("{0,3} ", list[columnIndex][rowIndex].ToString());
}
Console.WriteLine();
}}
private static double calcAvgOfPositive(List<List<int>> columns){
return columns.SelectMany(row => row.FindAll(value => value > 0)).DefaultIfEmpty(0).Average();
}
private static List<List<int>> makeRandomList(int rows, int columns){
List<List<int>> Array = new List<List<int>>(); //динамический двумерный массив
Random rnd = new Random(); // переделано то, что забивается рандомом
for (int i = 0; i < columns; i++){
List<int> ArrayRow = new List<int>();
for (int j = 0; j < rows; j++){
ArrayRow.Add(rnd.Next(-10, 10));
}
Array.Add(ArrayRow);
}
return Array;
}
private static List<int> makeZeroColumn(int rows) {
List<int> EmptyRow = new List<int>();
for (int j = 0; j < rows; j++){
EmptyRow.Add(0);
}
return EmptyRow;
}}}
ЗАДАЧА 9. СОРТИРОВКИ МАССИВОВ
Упорядочить элементы в матрице по убыванию (слева направо, сверху вниз).
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace DZ_9{
class Program{
static void Main(string[] args){
int str, stol;
Console.WriteLine("Enter the number of rows, please:");
str = Convert.ToInt32(Console.ReadLine());
Console.WriteLine("Enter the number of columns, please:");
stol = Convert.ToInt32(Console.ReadLine());
int[,] arr = new int[str, stol];
Console.Clear();
Random ran = new Random();
for (int i = 0; i < str; i++) {
for (int j = 0; j < stol; j++){
arr[i, j] = ran.Next(-10, 10);
}
Console.WriteLine();
}
Console.WriteLine("Original \n \n");
Show(arr);
SortRow(arr);
Console.WriteLine("Sorting from left to right *Descendingly* \n \n");
Show(arr);
SortCol(arr);
Console.WriteLine("Sorting from top down *Descendingly* \n \n");
Show(arr);
Console.ReadKey();
}
static void SortRow(int[,] m){
List<int> t = new List<int>();
for (int i = 0; i < m.GetLength(0); i++){
for (int j = 0; j < m.GetLength(1); j++) t.Add(m[i, j]);
t = t.OrderByDescending(x => x).ToList();
for (int j = 0; j < m.GetLength(1); j++) m[i, j] = t[j];
t.Clear();
}
}
static void SortCol(int[,] m){
List<int> t = new List<int>();
for (int i = 0; i < m.GetLength(1); i++){
for (int j = 0; j < m.GetLength(0); j++) t.Add(m[j, i]);
t = t.OrderByDescending(x => x).ToList();
for (int j = 0; j < m.GetLength(0); j++) m[j, i] = t[j];
t.Clear();
}
}
static void Show(int[,] m){
for (int i = 0; i < m.GetLength(0); i++){
for (int j = 0; j < m.GetLength(1); j++){
Console.Write(m[i, j] + "\t");
}
Console.WriteLine();
}
Console.WriteLine();
}}}