Программирование на C/C++
"Программирование
на С/С++"
программирование модифицированный массив
Задание 1
Изучить теоретический материал, ответить на
контрольные вопросы. Самостоятельно создать новое консольное приложение.
В функции Main() объявить 2 переменные типа
string, 1 - типа int, 1 - типа double.
Ввести их значения с клавиатуры и рассчитать
сумму и произведение арифметических переменных, сумму строк.
Решение
using
System;System.Collections.Generic;System.Linq;System.Text;ConsoleApplication1
{Program
{void Main(string[] args)
{
// это предыдущее задание, я его
закомментировал но на всякий случай оставил
//double myDouble;
// string myString;
// myDouble =
Convert.ToDouble(Console.ReadLine());
// myString = "\" myDouble
\"is";
// Console.WriteLine("{0} {1}",
myString, myDouble);aaa;bbb;ccc;ddd;x;z;
.WriteLine("Задание: объявить 2
переменные типа string, 1 - типа int, 1 - типа double. Ввести их значения с
клавиатуры и рассчитать сумму и произведение арифметических переменных, сумму
строк.");
.WriteLine("Введите
строку");= Console.ReadLine();.WriteLine("Введите еще одну
строку");= Console.ReadLine();.WriteLine("Введите число");=
Convert.ToInt32(Console.ReadLine());.WriteLine("Введите еще одно
число");= Convert.ToDouble(Console.ReadLine());= ccc + Convert.ToInt32(ddd);=
ccc * Convert.ToInt32(ddd);.WriteLine("сумма арифметических переменных =
"+x);.WriteLine("произведение арифметических переменных = " +
z);.WriteLine("сумма строковых переменных = " + aaa+bbb);
}
}
}
Результат работы программы
Рис.
Задание 2
. Ввести с клавиатуры границы диапазона n и N
натуральных чисел (n<N). Из чисел, входящих в этот диапазон, необходимо
напечатать только те, цифры которых являются соседними в натуральном ряду.
Подсчитать количество этих чисел и определить, сколько среди них четных и
нечетных.
Решение
using
System;System.Collections.Generic;System.Linq;System.Text;ConsoleApplication1
{Program
{void Main(string[] args)
{x1, x2, a, b, s, w, v, z, x, size,
step, count, count2, count3;.WriteLine("Введите границу начала
ряда");= Convert.ToInt32(Console.ReadLine());.WriteLine("Введите
границу конца ряда");= Convert.ToInt32(Console.ReadLine());= 0;= 0;i =
x1;( ; i < x2 + 1; i++)
{:
// определяем разрядность числа
size= 0;= i;(; w > 0; size++)
{= w / 10;
}
// оределяем степернь делителя=
size;= 10;(v > 2)
{= v - 1;= step * 10;
}
// объявляем массив размером sizey =
0;[] A1 = new int[size];
// раскладываем число на фиры в
массив(int j = 0; j < size - 1; j++)
{= i;:= s / step;[j + y] = a;= s %
step;(b < 1)
{= i + (step/10);ewq;
}(b < 10)
{++;[j + y] = b;
}
{++;= b;= step / 10;qwe;
}
}
// проверяем отвечает ли массив
заявленным требованиям= 0;= 0;(int d = 0; d < size; d++)
{= 1;(d == size-1)
{= 0;
}((A1[d] + 1) == A1[d+v])
{++;
}((A1[d] - 1) == A1[d + v])
{++;
}
}
// выводим на экран и ведм посчет
количества count и четности count2(z == size - 1)
{++;(int n = 0; n < size; n++)
{.Write(A1[n]);
}(A1[size-1] % 2 == 0)
{++;
}.WriteLine();
}(x == size - 1)
{++;(int n = 0; n < size; n++)
{.Write(A1[n]);
}(A1[size-1] % 2 == 0)
{++;
}.WriteLine();
}
// выводим на экран данные о
количестве и четности.WriteLine("Количество соседних чисел = {0}",
count);.WriteLine("Из них четных = {0}", count2);= count -
count2;.WriteLine("Из них нечетных = {0}", count3);.ReadLine();
}
}
}
Результат работы программы
Рис.
Задание 3
. Составить программу вычисления:
Действительные числа а, b и натуральное N
задаюaтся пользователем программы.
Решение
System;System.Collections.Generic;System.Linq;System.Text;_444
{Program
{void Main(string[] args)
{a, b, i;N, h, F, s, FF, x;.WriteLine("Введите
(a)");= Convert.ToInt32(Console.ReadLine());.WriteLine("Введите
(b)");= Convert.ToInt32(Console.ReadLine());.WriteLine("Введите
(N)");= Convert.ToDouble(Console.ReadLine());= (b - a) / N;= 0;(i = 1; i
<= N; i++)
{= 1+(a-(i-0.5));= s * s;= (a + ((i
- 0.5) * h)) / s;= FF + F;.WriteLine("F{1}= ({0})", F,
i);.WriteLine();
}=FF*
h;.WriteLine("(F1+F2+F3+...+FN)h = {0}", x);.ReadLine();
}
}
}
Результат работы программы
Рис.
Задание 4
3. Даны действительные числа . Составить
программу вычисления суммы с точностью и ее последнего слагаемого:
Решение
using
System;System.Collections.Generic;System.Linq;System.Text;_333
{Program
{void Main(string[] args)
{x, e, k, a, b, w, v, sw, sx, f, g, i, ii, j, s,
z, sum;.WriteLine("Введите X");=
Convert.ToDouble(Console.ReadLine());.WriteLine("Введите Эпсилон");=
Convert.ToDouble(Console.ReadLine());= 0;= -1;= 0;
{++;= 0;= w;( ; i < k; i++)
{= sw * w;
}= (2 * k) + 1;= 0;= x;( ; j < v-1; j++)
{= sx * x;
}= sw * sx;= k + 2;= g;= 1;(; ii < g; ii++)
{= f * ii;
}= f * ((2 * k) + 1);= a / b;= s;=
sum+s;.WriteLine("[слагаемое]-({0})", s);
// Считатаем, что требуемая точность достигнута,
если очередное
// слагаемое суммы оказалось по модулю меньше
чем эпсилон= Math.Abs(z);
}(z >
e);.WriteLine();.WriteLine("[последнее слагаемое]-({0})",
s);.WriteLine("[Сумма]-({0})", sum);.ReadLine();
}
}
}
Результат работы программы
Рис.
Задание 5
. В одномерный массив размерности N ввести
произвольные числа. Ввести число К. Если в исходном массиве чисел больше чем К,
то массиве выполнить кольцевой сдвиг массива так, чтобы его первый максимальный
элемент оказался на K-м месте (N и K заданы). Кольцевой сдвиг массива
выполняется всеми его элементами так, что элементы «выталкиваемые» из массива в
одну сторону занимают освободившиеся место с другой стороны. Если К больше или
равно числу элементов в исходном массиве, то создать новый массив, добавив в
начало исходного массива число К. Напечатать модифицированный массив.
Решение
using
System;System.Collections.Generic;System.Linq;System.Text;_31
{Program
{void Main(string[] args)
{[] A1 = new int[9] {4, 3, 8, 12,
29, 2, 31, 25, 3};K, a, b, c, z, f;.WriteLine("Исходный массив");(int
i = 0; i < A1.Length; i++)
{.Write(A1[i]+"\t");
}.WriteLine();.WriteLine("Введите
(К)");=Convert.ToInt32(Console.ReadLine());
// если К меньше количества
элементов в массиве то...(K < A1.Length)
{
// определяем первый максимальный
элемент массива= 1;= A1[0];= 0;= 0;(int i = 0; i < A1.Length; i++)
{(i == A1.Length - 1)
{ c = 0; }= A1[i + c];(a < b)
{= b;= i + c + 1;
}
}
// выполняем крольцевой сдвиг
массива
{= A1[A1.Length - 1];(int j =
A1.Length - 1; j >= 1; j--)
{[j] = A1[j - 1];
}[0] = z;
}(A1[K - 1] !=
a);.WriteLine("Модифицированный массив");(int i = 0; i <
A1.Length; i++)
}
}
// если К больше или равно
количеству элементов в массиве то...
{[] A2 = new int[10];
// добавляем элемент в начало
массива[0] = K;
// копируем элементы исходного
массива(int i = 1; i < A2.Length; i++)
{[i] = A1[i - 1];
}.WriteLine("Модифицированный
массив");(int i = 0; i < A2.Length; i++)
{.Write(A2[i] + "\t");
}
}.ReadLine();
}
}
}
Результат работы программы
Рис.
Задание 6
. Составить программу, которая получает матрицу
Х размерностью m*n и и вектор А, размером m. Каждому элементу вектора
поставлена в соответствие строка с тем же номером. Программа сортирует вектор А
в порядке возрастания и формирует новую матрицу, расположив строки исходной
матрицы в том же порядке, что и элементы вектора после сортировки.
Решение
using
System;System.Collections.Generic;System.Linq;System.Text;_32
{Program
{void Main(string[] args)
{[,] matr;= new int[6, 6];[,] matr1;=
new int[6, 6];[] vect;= new int[6];[] vect1;= new int[6];a, b, c, f, r, w;=
(matr.Length / 6)-1;
// заполняем матрицу(int i = 0; i
< matr.Length / 6; i++)
{(int j = 0; j < matr.Length / 6;
j++)
{[i, j] = i*j;
}
}
// выводим матрицу на консоль.WriteLine("Исходная
матрица");(int i = 0; i < matr.Length / 6; i++)
{(int j = 0; j < matr.Length / 6;
j++)
{.Write(matr[i, j] +
"\t");
}.WriteLine();
}
// вводим с клавиатуры элементы
вектора(int i = 0; i < vect.Length; i++)
{.WriteLine("Введите очередной
элемент вектора");[i] = Convert.ToInt32(Console.ReadLine());
}
// выводим на консоль
вектор.WriteLine();.WriteLine("Исходный вектор");(int i = 0; i <
vect.Length; i++)
{.WriteLine(vect[i]);
}.WriteLine();
// сортируем вектор по возростанию=
0;= 0;(int s = 0; s < vect.Length; s++)
{= 1;= vect[0];= 0;= 0;(int i = 0; i
< vect.Length; i++)
{(i == vect.Length - 1)
{ c = 0; b = vect[vect.Length-1];
goto wer; }= vect[i + c];(a < b)
{= b;= i + c ;
}
}:[f] = 0;[s] = a;
// сопоставляем строки матрицы с
элементами вектора через
// переменную f, хранящую индекс
отсортированного значения вектора(int i = 0; i < matr1.Length / 6; i++)
{[r,i]= matr[i,f];
}-;
}.Reverse(vect1);
// выводим на экран отсортированный
по возростанию вектор.WriteLine();.WriteLine("Отсортированный вектор");(int
i = 0; i < vect1.Length; i++)
{.WriteLine(vect1[i]);
}
// выводим на экран полученную
матрицу.WriteLine("Полученная матрица");(int i = 0; i <
matr1.Length / 6; i++)
{(int j = 0; j < matr1.Length /
6; j++)
{.Write(matr1[i, j] +
"\t");
}.WriteLine();
}.ReadLine();
}
}
}
Результат работы
программы
Рис.
Задание 7
Описать структуру с именем STUDENT, содержащую
следующие поля:
фамилия и инициалы;
факультет (тип - перечисление);
успеваемость (массив из пяти элементов).
Написать программу, выполняющую следующие
действия:
заполнение данными массива, состоящего из восьми
структур типа STUDENT;
упорядочение записей по возрастанию факультета и
номера группы;
вывод записей в обратном порядке;
вывод на дисплей фамилий и номеров групп для
всех студентов, имеющих оценки 3 и 4. Если таких записей нет, то вывести
соответствующее сообщение
Решение
using
System;System.Collections.Generic;System.Linq;System.Text;_4
{ff: byte
{
ФВЗО=1,
РТФ,
АФ,
ФАЭМ
}student
{string fio;ff fak;int n;int[] usp;
}Program
{void Main(string[] args)
{a;[] st = new student[8];[] oc = new
int[5];:.WriteLine("\aВыберите действие \n(1)Заполнение
массива\n(2)Упорядочивание записей по группе \n(3)Упорядочивание записей по
факультету \n(4)Вывод записей в обратном порядке \n(5)Вывести имена студентов
имеющих оценки 3 и 4 \n(6)Выход ");=
Convert.ToInt32(Console.ReadLine());(a == 1)
{(int i = 0; i < st.Length; i++)
{.WriteLine("Введите Фамилию студента и
инициалы");[i].fio = Console.ReadLine();.WriteLine("Выберите
факультет \n (1)ФВЗО \n (2)РТФ \n (3)АФ \n (4)ФАЭМ");[i].fak =
(ff)Convert.ToByte(Console.ReadLine());.WriteLine("Введите номер
группы");[i].n =
Convert.ToInt32(Console.ReadLine());.WriteLine("Введите успеваемость (пять
оценок)");[i].usp = new int[5];(int j = 0; j < st[i].usp.Length; j++)
{[i].usp[j] =
Convert.ToInt32(Console.ReadLine());
}
}(st);qwe;
}(a == 2)
{.WriteLine();.WriteLine("Упорядочивание
записей по номеру группы");(ref st);(st);qwe;
}(a == 3)
{.WriteLine();.WriteLine("Упорядочивание
записей по факультету");(ref st);(st);qwe;
}(a == 4)
{.WriteLine();.WriteLine("Вывод записей в
обратном порядке");.Reverse(st);(st);qwe;
}(a == 5)
{.WriteLine();.WriteLine("Студенты, имеющие
3 и 4");(st);qwe;
}(a > 5)
{;
}
}void Sort(ref student[] A)
{[] B = A;(int i=0; i<B.Length; i++)
{(int j=i; j<B.Length; j++)
{(A[j].n.CompareTo(B[i].n) < 0)
{h;=B[i];[i]=B[j];[j]=h;
}
}
}(student a in B) ;
}void SortF(ref student[] A)
{[] B = A;(int i = 0; i < B.Length; i++)
{(int j = i; j < B.Length; j++)
{(A[j].fak.CompareTo(B[i].fak) < 0)
{h;= B[i];[i] = B[j];[j] = h;
}
}
}(student a in B) ;
}void Vyvod34(student[] A)
{g = 0;(int i = 0; i < A.Length; i++)
{[]B = A[i].usp;s=0;(int j=0; j<B.Length;
j++)
{(B[j] == 3) { s++; g++;}(B[j] == 4) { s++;
g++;}
}(s > 0)
{.WriteLine("\a{0}\t{1}", A[i].fio,
A[i].n);
}
}(g == 0)
{.WriteLine(" отсутствуют");
}
}void Print(student[] A)
{.Write("\tФИО\t\tФакультет\tГруппа\tУспеваемость");.WriteLine();(int
i = 0; i < A.Length; i++)
{.Write("{0}\t\t{1}\t\t{2}\t{3} {4} {5} {6}
{7}", A[i].fio, A[i].fak, A[i].n, A[i].usp[0], A[i].usp[1], A[i].usp[2],
A[i].usp[3], A[i].usp[4]);.WriteLine();
}
}
}
}
Вводим данные с клавиатуры
Рис.
Упорядочиваем по группе
Рис.
Упорядочиваем по факультету
Рис.
Выводим записи в обратном порядке
Рис.
Выводим имена и группы студентов, имеющих 3 м 4
Рис.
Задание 8
Текст состоит из предложений, разделенных
точкой. Текст вводится с клавиатуры, его длина не превышает 1000 символов.
Удалить из текста заданное слово. Слова разделены пробелами и знаками
препинания.
Решение
using
System;System.Collections.Generic;System.Linq;System.Text;_5
{Program
{void Main(string[] args)
{text, word;.WriteLine("Введите
текст");= Console.ReadLine();.WriteLine("Введите слово");=
Console.ReadLine();
// инициализируме массивы с
разделителями[] sS = new char[] { ' ' };[] zp = new char[] { '.', ':', ';',
',', '?', '!', '\n', '\r' };
// Инициализируем массив строк на
подстроки по разделителям[] result = text.Split(sS);[] newtext = new
string[result.Length];(int i = 0; i < result.Length; i++)
{[] elem = result[i].Split(zp);
// сравниваем каждый элемент массива
с word и если они не равны,
// то добавляем его в новый
массив(elem[0] != word)
{[i] = result[i];
}
}
// выводим на экран результат(int i
= 0; i < newtext.Length; i++)
{.Write("{0}
",newtext[i]);
}.ReadLine();
}
}
}
Результат работы
Рис.
Задание 9
Проверить, попадает ли заданная точка (x1, y1) в
прямоугольник ABCD. Прямоугольник задается с помощью левого верхнего и правого
нижнего углов. Спроектировать необходимые классы и составить тестирующую
процедуру.
Решение
using
System;System.Collections.Generic;System.Text;_66
{
// Опишем класс tetrtetr
{int koordX;int koordY;int koordA1;int
koordA2;int koordB1;int koordB2;
// конструкторtetr()
{= 0;= 0;= 0;= 0;= 0;= 0;
}
// параметризованный конструкторtetr(int koordX,
int koordY, int koordA1, int koordA2, int koordB1, int koordB2)
{.koordX = koordX;.koordY = koordY;.koordA1 =
koordA1;.koordB1 = koordB1;.koordA2 = koordA2;.koordB2 = koordB2;
}
// метод для определения положения точкиvoid
rez()
{(koordX <= koordA1 && koordY <=
koordB2)
{(koordY >= koordB1 && koordX >=
koordA2)
{.WriteLine("Точка в плоскости прямоугольника");
}{ Console.WriteLine("Точка НЕ попала в
плоскость прямоугольника"); }
}{ Console.WriteLine("Точка НЕ попала в
плоскость прямоугольника"); }
}void Main(string[] args)
// тестирующая процедура
{s=new tetr();.WriteLine("Введите координат
прямоугольника ");.WriteLine("Координаты левого верхнего
угла");.Write("X - ");.koordA1 =
Convert.ToInt32(Console.ReadLine());.Write("Y - ");.koordB1 =
Convert.ToInt32(Console.ReadLine());.WriteLine("Координаты правого нижнего
угла");.Write("X - ");.koordA2 =
Convert.ToInt32(Console.ReadLine());.Write("Y - ");.koordB2 =
Convert.ToInt32(Console.ReadLine());.WriteLine("Введите координат точки
");.Write("X - ");.koordX =
Convert.ToInt32(Console.ReadLine());.Write("Y - ");.koordY =
Convert.ToInt32(Console.ReadLine());.rez();.ReadKey();
}
}
}
Результат работы программы
Рис.
Рис.