Добавил:
ivanov666
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз:
Предмет:
Файл:Программирование на C#. Часть 1. Учебное пособие
.pdf
Console.WriteLine ("Введите целое число... ");
Console.ReadLine (x);
Console.WriteLine ("Разложение числа {0}на простые множители", x);
m=2;
while (m<=x)
{
If (x% m==0)
{
Console.Write("*{0}",m);
x=x/m;
}
else m=m+1;
}
}
5. Найти все простые числа на заданном отрезке (использовать цикл с
параметром)
{
int m; //Нижняя граница отрезка
int n; //Верхняя граница отрезка
int i; j; //Параметры циклов
int kl;
Console.WriteLine ("Введите нижнюю границу отрезка... ");
Console.ReadeLine (m);
Console.WriteLine ("Введите верхнюю границу отрезка... ");
Console.ReadeLine (n);
Console.ReadeLine ("Все простые числа из отрезка [{0},{1}]",m ,n);
51

for (i=m; i<= n; i++)
{ kl=0;
for (j=2; j<=Match.Sqrt(i); j++)
if (i% j)=0 kl=kl+1;
if (kl=0) Write (" {0}",i);
}
}
6. Подсчитать, сколько полиндромических чисел лежат в промежутке
от 100 до 1000 (число m называется полиндромическим, если оно равно своему обращенному). Выведите их на экран дисплея.
{
int d; // Результат работы программы
int x; y; z;// Парамет
int n; //
Полиндром
ры циклов
intm; // Вспомогательная переменная
d=0;
for (x=1; x<= 9; x++)
{
for (y=1; y<= 9; y++)
{
for (z=0; z<= 9; z++)
{
n=100*x+10*y+z;
m=100*z+10*y+x;
if (n=m) d=d+1; Console.WriteLine (" {0}", n);
}
52
}
}
}
Console.WriteLine ("Результат: {0}",d);

3.6. ЗАДАЧИ ДЛЯ САМОСТОЯТЕЛЬНОГО РЕШЕНИЯ
1. Составьте алгоритм и программу вычисления наибольшего значения
(x
+ yi) для одномерных массивов размерностью 10, элементы которых за-
i
полняются случайными числами в диапазоне от –π до +π. На печать вывести
исходные массивы и полученный результат.
2.
Используя оператор цикла составить схему алгоритма и программу
для вычисления и печати значений функции
1
sinxxy
2)( +=
,
xcos
при х изменяющемся от 0 до 1 с шагом 0,1.
3.
Используя оператор цикла найти сумму 10 членов ряда, в котором
а
= ln(n!)/n2 .
n
4.
Составьте программу записи (+1) вместо максимального и (–1) вме-
сто минимального элемента массива A[1…10] , элементы которого заполняются случайными числами в диапазоне от –2π до +2π . На печать вывести исходный и полученный массивы.
5.
Составьте программу вычисления наибольшего элемента главной
диагонали матрицы А(10, 10), элементы которой заполняются случайными
числами в диапазоне от –π до +π. На печать вывести исходную матрицу и
строку, в которой находится наибольший элемент главной диагонали .
6.
Составьте программу определения номера (индекса) наибольшего из
положительных элементов массива X[1...20] и суммы его отрицательных
элементов. Элементы массива заполняются случайными числами в диапазоне
от –2π до +2π . На печать вывести исходный массив и полученные результаты.
7.
Составьте программу вычисления значений элементов массива
z[1…10]
5
1(z
∏
где x
= sin(j). На печать вывести исходный и полученный массивы.
j
8.
Составьте программу вычисления суммы положительных элементов
j
=
i
1
1
+
),
xe
j
+=
i
и наименьший элемент матрицы В (10, 10), элементы которой заполняются
53

случайными числами в диапазоне от –π до +π. На печать вывести исходную
матрицу и полученные результаты.
9.
Составьте программу определения количества положительных и от-
рицательных значений матрицы А(10, 15) элементы которой заполняются
случайными числами в диапазоне от –2π до +2π . На печать вывести исходную матрицу и полученные результаты.
10.
Числа Фибоначчи определяются формулами f
= f1 = 1; fn = f
0
n–1
+ f
n–2
при n = 2, 3, ... . Определить десятое число Фибоначчи.
11.
Найти – первое число Фибоначчи, большее m (m > 1).
12.
Дано целое n > 2. Напечатать все простые числа из диапазона [2, n].
13.
Определить число, получаемое выписыванием в обратном порядке
цифр заданного натурального числа.
14.
Определить, является ли заданное натуральное число палиндромом,
т.е. таким, десятичная запись которого читается одинаково слева направо и
справа налево.
15.
Составьте программу вычисления значения функции
k
xsin
)(
i
,
k
1(
1
+=
i
+
),
xe
j
где x
где x
заданы массивом (x1, x2, …, x10); n = 1, 2, …, 10.
i
16.
Составьте программу вычисления значения функции
заданы массивом (x1, x2, …, x20). Результаты запомнить в массиве z.
j
17.
Составить программу вычисления значений функции f(x) на отрезке
[a, b] в точках x
10
z
=
∑∑
==
ink
11
20
z
∏
j
1
=
i
= a + ih, где h = (b – a)/m, m – заданное целое число. Для за-
i
дания значений х и соответствующих значений следует использовать простые переменные. Значение шага h должно вычисляться один раз. При изменении значения аргумента х использовать оператор присваивания
х = х + h, а не оператор с использованием операции умножения x = a + i*h,
что существенно сокращает время выполнения программы. Значение функции f(x) взять из ра
54
а 2.4 для номеров 12, 14, 17 – 21.
здел

4. ПРОЦЕДУРЫ И ФУНКЦИИ
В объектно-ориентированном программировании понятие процедуры и
функции объединены одним словом метод. В языке C# методы существуют
только как методы некоторого класса, они не существуют вне класса.Роль
библиотек методов играет библиотека классов FCL.
4.1. ОПИСАНИЕ МЕТОДОВ
Синтаксически в описании метода различают две части – описание за-
головка и описание тела метода:
Синтаксис заголовка метода:
[атрибуты][модификаторы]{void| тип_результата_функции} имя_
метода([список_формальных_аргументов])
Сигнатуру метода включает имя метода и список формальных аргу-
ментов. Атрибуты и модификаторы, приведённые в квадратных скобках, при
описании метода могут быть опущены. Наиболее часто используемые моди-
фикаторы:publ
ic, который показыв
ает, что метод открыт и доступен для вы-
зова клиентами и потомками класса и модификатор private – что метод пред-
назначен для внутреннего использования в классе и доступен для вызова
только в теле методов самого класса. По умолчанию предполагается, что мо-
дификатор имеет значение private.
Указание типа результата, им
ени метода и круглых скобок, наличие ко-
торых необходимо и в том случае, если сам список формальных аргументов
отсутствует является обязательным при описании заголовка.
Список формальных аргументов метода может быть пустым и это до-
вольно типичная ситуация для методов класса. Он может содержать фикси-
рованное число аргументов, разделяемых симво
лом за
пятой.
Синтаксис объявления одного формального аргумента:
[ref|out|params]тип_аргументаимя_аргумента
55

Указание типа и имени аргумента является обязательным. Тип аргумента может быть любым скалярным типом, массивом, структурой, классом,
интерфейсом, перечислением, функциональным типом.
Для реализации передачи произвольного числа фактических аргументов в списке формальных аргументов необходимо задать ключевое слово pa-
rams, которое может появляться в объявлении лишь для последнего аргумента списка, объявляемого как массив пр
такому формальному аргументу соответству
оизвольного типа. При вызове метода
ет произвольное число фактиче-
ских аргументов.
Все аргументы метода можно разделить на три группы: входные, выходные и обновляемые. Входные – передают информацию методу, их значения в теле метода только читаются. Выходные – представляют собой результаты метода, они получают значения в ходе работы мето
вождаться ключевым слово
м out. Обновляемые – выполняют обе функции и
да и должны сопро-
должны сопровождаться ключевым словом ref.
Пример:
/// <summary>
/// Группа перегруженных методов A()
/// первый аргумент представляет сумму кубов
56
/// произвольного числа оставшихся аргументов
/// Аргументы могут быть разного типа.
/// </summary>
void A (out long p2, int p1)
{
p2 =(long) Math.Pow(p1,3);
Console.WriteLine ("МетодA-1");
}
void A (out long p2, params int[] p)
{
p2=0;

for(int i=0; i<p.Length; i++)
p2 += (long)Math.Pow(p[i],3);
Console.WriteLine("МетодA-2");
}
void A(out double p2, double p1)
{
p2 = Math.Pow(p1,3);
Console.WriteLine("МетодA-3");
}
void A(out double p2, params double[] p)
{
p2=0; for(inti=0; i<p.Length; i++)
p2 += Math.Pow(p[i],3);
Console.WriteLine("МетодA-4");
}
/// <summary>
/// Функция с побочным эффектом
/// </summary>
/// <param name="a">Увеличивается на 1</param>
/// <returns>значение a на входе</returns>
int f (ref int a)
{
return(a++);
}
Перегруженные методы с именем A являются аналогами процедур, а
метод f – функций. Перегруженные методы имеют разную сигнатуру, отличающаяся типами и ключевыми словами, предшествующими аргументам.
Тело метода синтаксически является блоком, представляющим последовательность операторов и описаний переменных, заключённую в фигурные
скобки. Если метод используется как функция, то в блоке должен быть хотя
57

бы один оператор перехода, возвращающий значение функции в форме return
(выражение).
Все переменные, описанные в блоке, являются локализованными в
этом блоке.
Метод может вызываться в выражениях или быть вызван как оператор.
Метод с клеевым словом voidиспользуется только в качестве оператора.
Вызов метода имеет следующий синтаксис:
имя_метода([список_фактических_аргументов])
Для мето
да – оператор вызов завершается точкой с зап
ятой.
Более точный синтаксис фактического аргумента:
[ref|out]выражение
Список формальных и список фактических аргументов должен соот-
ветствовать по числу, порядку следования, типу и статусу аргументов. Для
формальных аргументов с ключевыми словами ref или out, соответствующий
фактический аргумент не может быть выражением, поскольку используется в
левой ча
сти оператора присваивания, так что он должен быть именем, кото-
рому можно присвоить значение.
4.2. ПРИМЕРЫ РЕШЕНИЯ ЗАДАЧ
1. Рассчитать значение
mn
F
=
+
,
!)(!!mn
где n и m – неотрицательные целые числа. Для расчёта значений факториалов
использовать: 1) – подпрограмму функцию; 2) – подпрограмму процедуру.
Исходная форма для решения задачи приведена на рис. 4.1, а результат –
на рис. 4.2. На форме находятся три кнопки Buttоn, две выполняют решение
задачи методом – функция и методом – процедура, третья – выход из про-
граммы. Два текстовых окн
а TextBox – для ввода знач
ения n и m. Три метки
Label – две для комментария, а третья для вывода результата.
58

Рис. 4.1. Исходная форма
Рис. 4.2. Результат решения
59

Программа, реализующая проект, приведена ниже.
// Используемые пространства имен.
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
namespace WindowsFormsApplication1
{
public partial class Form1 :Form
{
// Описание метода - функция.
double fak (intn)
{
int i;
double p = 1;
for (i = 1; i<= n; i++)
p = p * i;
return p;
}
// Описание метода - процедура.
60
void f ak (int n, out double p)
{
int i;
p = 1;
Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]
