Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
387.doc
Скачиваний:
11
Добавлен:
30.04.2022
Размер:
3.51 Mб
Скачать

Примеры решения задач

Проверить, является ли двоичная запись натурального числа N палиндромом. N задано, и не должно превосходить 100. Палиндром - число, которое имеет одинаковое чтение слева направо и справа налево.

static int Main(string[] args)

{

int numb, kRazr, work;

bool flag=false;

Console.WriteLine("Введите натуральное число до 100");

numb= Convert.ToInt32(Console.ReadLine());

if (numb>100) return 0;

// посчитаем, сколько двоичных разрядов в числе

work=numb; kRazr=0;

while (work>0)

{ work>>=1; kRazr++; }

Console.WriteLine("Двоичных разрядов {0}",kRazr);

if ((numb&1)==0)

{ Console.WriteLine("Не палиндром"); return 0; }

for (int i=0; i<kRazr/2; i++)

{

// младший разряд (numb>>i)&1

// Старший разряд (numb>>(kRazr-i-1))&1

if (((numb>>i)&1)!=((numb>>(kRazr-i-1))&1))

{ flag=false; break; }

flag=true;

}

if (flag) Console.WriteLine("Палиндром");

else Console.WriteLine("Не палиндром");

return 0;

}

Среди последовательности вводимых натуральных чисел определить количество чисел содержащих цифру N. Количество вводимых чисел заранее не известно.

namespace ConsoleApplication3

{

class Class1

{

// процедура подсчета необходимых цифр

static int schet(int zifra,int N){

int k=0;

while (zifra>10){

// поиск цифры происходит через проверку остатка от деления на 10

double ost=zifra%10;

if (ost==N)

{

k=k+1;

break;

}

zifra=zifra/10;

}

if (zifra==N)

{ k=k+1; }

return k;

}

static void Main(string[] args)

{

Console.WriteLine("Какую цифру будем искать? ");

int N=Convert.ToInt32(Console.ReadLine());

Console.WriteLine("Вводите числа, выход - 0");

int rez=0;

int zifra;

bool usl_vix=true;

// числа вводятся пока пользователь не введет 0

while (usl_vix){

zifra=Convert.ToInt32(Console.ReadLine());

if (zifra!=0)

{

rez=rez+schet(zifra,N);}

else { usl_vix=false; }

}

Console.WriteLine(" Чисел, содержащих цифру = {0} равно = {1}",N,rez);

}

}

}

Контрольная работа № 3 техника работы с массивами. Процедуры и функции

Цель работы состоит в получении навыков использования одномерных и многомерных массивов, разработке функций.

Теоретические сведения

Массив представляет собой список индексированных переменных. Доступ к конкретному элементу осуществляется по индексу

<имяМассива>[<индекс>]

Индекс – целое число, начинается с 0.

Определяются массивы так:

<базовыйТип> [ ] <имя>;

Базовый тип может быть произвольным, в том числе перечислимым или структурой.

Прежде чем получить доступ к массиву, его надо инициализировать. Инициализировать массивы можно двумя способами:

1) задать его содержимое в литеральной форме;

2) указать размер массива и использовать для инициализации всех его элементов ключевое слово new.

Рассмотрим 1-й способ:

int [] myArr = {1, 4, 7, 99 };

Получили описание массива из 4 целых элементов со значениями, перечисленными в {}.

Объявление массива 2-м способом:

int [] myArr = new int[4];

Описали массив из 4-х целых элементов. По умолчанию элементы обнуляются.

Важное различие между массивами С++ и С# заключается в том, что в С# элементам массива автоматически присваиваются значения по умолчанию в зависимости от их типа. Например, для целочисленных элементов – 0, для объектов – null.

По желанию можно использовать оба способа

int [] myArr = new int[4] {1, 4, 7, 99 };

В этом случае размеры массива должны совпадать с количеством элементов в списке. Инициализировать массив можно и не в строке объявления

int [] myArr;

myArr = new int[4];

string[] firstName = new string[5];

firstName[0]=”Федя”;

firstName[1]=”Вася”;

firstName[2]=”Дима”;

firstName[3]=”Татьяна”;

firstName[4]=”Света”;

Если размерность массива задается с помощью переменной, то она должна объявляться со словом const.

Цикл foreach позволяет обращаться ко всем элементам массива очень просто:

foreach( <базовыйТип> <имя> in <массив>)

{

// можно использовать для доступа к очередному элементу

}

Например:

string[] myStrings = {"AAA","bbb","CCCC","dd"};

foreach( string s in myStrings)

{

Console.WriteLine(s);

}

Рис. 13. Результаты работы цикла foreach

Помимо простых массивов (одномерных) в C# имеется еще 2 основных типа массивов: многомерные и ломаные (jagged).

Многомерные массивы образуются простым сложением нескольких измерений. При этом все строки и все столбцы будут одинаковых длин.

Объявление и заполнение такого массива производится так:

1) double [,] matr = { {1,2,3}, {2,3,4}, {3,4,5} };

2) double [,] matr = new double [3,3] { {1,2,3}, {2,3,4}, {3,4,5} };

3) int [,] myMatrix;

myMatrix = new int[6,6];

for (int i=0; i<myMatrix.Length/6; i++)

{

for (int j=0; j<myMatrix.Length/6; j++)

{

myMatrix[i,j]=i*j;

Console.Write(myMatrix[i,j]+"\t");

}

Console.WriteLine();

}

Рис. 14. Вывод матрицы

Ломаный (или неровный, или ступенчатый) многомерный массив содержит в качестве своих внутренних элементов некоторое число внутренних массивов, каждый из которых может иметь свой внутренний уникальный размер. Например:

int [][] div1To10= { new int[] {1},

new int[] {1,2},

new int[] {1,3},

new int[] {1,2,4},

new int[] {1,5},

new int[] {1,2,3,6},

new int[] {1,7},

new int[] {1,2,4,8},

new int[] {1,3,9},

new int[] {1,2,5,10}};

// теперь пройтись по каждому элементу ломаного массива можно так

foreach( int[] divOfInt in div1To10)

{

foreach(int i in divOfInt)

{

Console.Write(i+" ");

}

Console.WriteLine();

}

Рис. 15. Вывод ломаного массива

int [][] myJagArray = new int[5][];

//Создаем ломаный массив

for (int i=0; i<myJagArray.Length; i++)

{

myJagArray[i] = new int[i+7];

}

//Выводим каждую строку массива. По умолчанию все элементы=0

for (int i=0; i<5; i++)

{

Console.Write("Длина {0}-й строки равна {1}:\t",i,myJagArray[i].Length);

for (int j=0; j<myJagArray[i].Length; j++)

{

Console.Write(myJagArray[i][j]+" ");

}

Console.WriteLine(); }

Рис. 16. Вывод размера строки и элементов ломаного массива

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]