Met_VCSharp_Forms
.pdf
|
|
|
51 |
|
3-13. |
–1 3 + 23 – 3 3 + … + (–1) |
n n3 = (1/8)*(1 – (–1) |
n (1–6n 2 – 4n 3)) |
|
3-14. |
–1 4 + 24 – 3 4 + … + (–1) |
n n4 = (–1) n (n4 + 2n3 – n )/2 |
||
3-15. |
15 + 25 + 35 + … + n5 = (1/12)*n2(n + 1)2(2n2 +2n – 1) |
|||
3-16. |
15 – 2 5 + 35 – … +(–1) |
n–1 |
n5 = (1/4)(1 + (–1) n (5n2 – 5n 4 – 2n 5 –1)) |
|
3-17. 1 + 3 + 5 + … + (2n + 1) = (n + 1) 2 |
|
|||
3-18. |
1 – 3 + 5 – 7 + … +(–1) |
|
n(2n + 1) = (–1) n (n + 1) |
|
3-19. |
12 + 32 + 52 + … + (2n + 1) 2 = (1/3)(n + 1)(2n + 1)(2n + 3) |
|||
3-20. |
12 – 3 2 + 52 – … + (–1) |
n (2n + 1)2 = (–1) n 2(n + 1)2 – (1 + (–1) n)/2 |
||
3-21. |
13 + 33 + 53 + … + (2n + 1) 3 = (n + 1)2(2n2 + 4n + 1) |
|||
3-22. |
1*2 + 2*3 + … + n(n + 1) = (1/3)n(n + 1)(n + 2) |
|||
3-23. |
1*2*3 + 2*3*4 + … + n(n + 1)(n + 2) = (1/4)n(n + |
1)(n + 2)(n +3) |
52
Раздел 4. Обработка текстовых файлов
Вприводимых ниже заданиях следует разработать программу
сиспользованием кнопок на форме (см. пример ниже). Данные рекомендуется вводить с использованием объекта richTextBox и сохранять их в текстовом файле формата rtf. Вывод на экран также производить в область richTextBox. В качестве примера приведем выполнение следующего задания:
Дана запись с именем STUDENT, содержащая следующие поля:
∙Фамилия и инициалы;
∙Номер группы;
∙Успеваемость (массив из пяти элементов).
Написать программу, которая выполняет следующие действия:
∙Ввод с клавиатуры данных из 10 записей типа STUDENT, и занесение их в файл данных;
∙Чтение данных из файла и вывод их на экран;
∙Вывод на экран фамилий, номеров групп и оценок для всех студентов, которые являются круглыми отличниками (если таких нет – вывести об этом сообщение);
∙Список должен быть упорядочен по возрастанию номера группы.
Форма должна иметь примерно такой вид (рис. И-5):
Рис.
И-5
Кр
оме
тог о, дол жн
о
быт
ь
ещ е размещено два объекта – openFileDialog и saveFileDialog . Они нам потребуются для организации диалога при вводе данных в файл (и
53
последующего сохранения), а также при считывании из файла.
При первоначальном запуске данные на форме вносятся в поле richTextBox (в соответствии с той структурой, которая указана в задании), причем в пределах строки – данные одного студента: фамилия студента, номер группы, каждая из оценок вносятся через пробел. Занесем, например, данные, приведенные на рис. И-6 (окно слева).
Ри с. И- 6
Кн
опк
а
«С
охр
ан
ить
»
слу
жит для сохранения данных из окна richTextBox. Функция для кнопки «Сохранить» имеет вид:
private void button3_Click(object sender, EventArgs e) {//сохранение файла
DialogResult res = MessageBox.Show("Сохранить левое окно?", "ВАЖНЫЙ вопрос!", MessageBoxButtons.YesNo);
if (res==DialogResult.Yes) {saveFileDialog1.ShowDialog(); richTextBox1.SaveFile(saveFileDialog1.FileName); }
else {saveFileDialog1.ShowDialog();
richTextBox2.SaveFile(saveFileDialog1.FileName);} }
При нажатии на кнопку «Сохранить» сначала появится окно диалога вида
(рис. И-7):
Рис. И-7
54
А после нажатия на кнопку «Да» (если сохраняем содержимое левого окна) или «Нет» - если правого, откроется окно диалога для сохранения (рис. И-
8):
Рис. И-8
В этом окне нужно будет перейти на нужный диск и в нужную папку, а затем указать имя файла. Рекомендуется указывать у файла расширение rtf.
Затем рекомендуется поле richTextBox очистить с помощью кнопки «Очистить», функция для которой имеет вид:
private void button2_Click(object sender,EventArgs e) {//очистка левого окна
richTextBox1.Clear();
}
Далее следует файл открыть – кнопкой «Открыть», имеющей функцию: private void button1_Click(object sender,EventArgs e)
{//открытие и чтение файла openFileDialog1.ShowDialog(); richTextBox1.LoadFile(openFileDialog1.FileName);
}
При выполнении этой функции также сначала появиться окно диалога —
55
какое содержимое сохранять (левого окна или правого) — см. рис. И-7. Затем появится окно выбора пути и имени файла для открытия (аналогично рис. И-8). И здесь нужно будет перейти в соответствующий каталог (папку) и выбрать нужный для открытия файл. Обратите внимание, что мы здесь заранее ограничили список файлами текстового типа (rtf). Такой фильтр обеспечивается выполнением (при запуске приложения, т.е. при открытии формы) функции вида:
private void Form1_Load(object sender, EventArgs e) {//фильтр списка файлов
openFileDialog1.Filter = "richTextFile|*.rtf"; saveFileDialog1.Filter = "richTextFile|*.rtf";
}
Теперь данный список (из открытого файла) вновь появится в поле richTextBox и его можно обрабатывать. Например, для сортировки (упорядочения по номеру группы) следует нажать кнопку «Сортировать», содержащую функцию:
private void button4_Click(object sender, EventArgs e) {//сортировка по номеру группы по убыванию
int n = richTextBox1.Lines.Length;// число строк string s; int i;
string[] buf; int[,] a = new int[n,5];
int[] gr = new int[n]; string[] fam= new string[n]; double[] sr=new double[n];
for (i=0; i<n; i++)
{int ns=richTextBox1.Lines[i].Length;//длина i-й строки s=richTextBox1.Lines[i];//очередная строка buf=s.Split(' ');//вычленение элементов в строке fam[i]=buf[0]; gr[i]=int.Parse(buf[1]);
}
//сортировка поиском максимума
//и запоминание порядка максимумов в массиве m int k = 0; int nmax, max; int[] m = new int[n]; for (i=0; i<n; i++)
{max = 0; nmax = 0;
for (int j=0; j<n; j++)
{if (gr[j]>max) {max=gr[j]; nmax=j;}
}
m[k]=nmax; k++;
gr[nmax]=0;
}
richTextBox2.Clear();
56
//вывод упорядоченных строк в новое окно for (int j=0; j<n; j++)
{
richTextBox2.Text=richTextBox2.Text+"\n"+ richTextBox1.Lines[m[j]];
}
}
Внимательно изучите данную функцию. Обратите внимание, например, как вычисляется длина каждой строки и как далее вычленяются элементы строки: фамилия, номер группы.
Для преобразования номера группы (который в строке записан символами) в целое число используется функция int.Parse.
При нажатии на данную кнопку получим результат в отдельном окне richTextBox (см. рис. И-9, окошко справа). Как видно, список упорядочен по номеру группы в порядке убывания.
Ри с. И- 9
Да
лее
пот
реб
ует
ся
отф
иль
тро вать список (в данном случае выделить отличников). Для этого служит
кнопка «Отфильтровать» с функцией:
private void button5_Click(object sender, EventArgs e) {//отбор отличников и вывод во второе окошко
int n = richTextBox1.Lines.Length;// число строк string s; int i;
string[] buf; int[] a = new int[10];
int[] gr=new int[n]; string[] fam=new string[n]; double[] sr = new double[n]; richTextBox2.Clear();
for (i = 0; i < n; i++)
57
{int ns = richTextBox1.Lines[i].Length;//длина i-й строки s = richTextBox1.Lines[i];
buf = s.Split(' ');
fam[i] = buf[0]; gr[i] = int.Parse(buf[1]); long sum=0, kol=0;
for (int j=2; j<buf.Length; j++) {a[j]=int.Parse(buf[j]); sum+=a[j]; kol++; } sr[i]=(double)sum/kol;
if (sr[i] == 5) richTextBox2.Text = richTextBox2.Text + "\n" + richTextBox1.Lines[i];
}
}
Здесь сначала вычленяются оценки каждого студента и подсчитывается их количество. Поскольку заранее известно, что всего оценок пять штук, то круглый отличник должен иметь пять «пятерок». В результате соответствующую строку и выводим в поле richTextBox2 . Нажмем на эту кнопку «Отфильтровать» и получим отдельно список отличников (см. рис. И-10,
пра
вое
око
шк о)
Ри с. И- 10
Мо
жн о, кст ати
, такой отфильтрованный список записать в новый файл. Для этого надо воспользоваться кнопкой «Сохранить» (при этом, напомним, будет окошко диалога, где и следует указать, что сохраняем содержимое правого окна). При нажатии на нее потребуется указать имя (другое) файла и перейти, если нужно, в другую папку. Потом уже отфильтрованный список можно открыть и провести для него сортировку (т.е. упорядочить отдельно отличников).
58
4-1. Дана запись с именем STUDENT, содержащая следующие поля:
∙Фамилия и инициалы;
∙Номер группы;
∙Успеваемость (массив из пяти элементов).
Написать программу, которая выполняет следующие действия:
∙Ввод с клавиатуры данных из 10 записей типа STUDENT, и занесение их в файл данных;
∙Чтение данных из файла и вывод их на экран;
∙Вывод на экран фамилий и номеров групп для всех студентов, если средний балл студента больше 4 (если таких нет – вывести об этом сообщение);
∙Список должен быть упорядочен по возрастанию номера группы.
4-2. Дана запись с именем STUDENT, содержащая следующие поля:
∙Фамилия и инициалы;
∙Номер группы;
∙Успеваемость (массив из пяти элементов).
Написать программу, которая выполняет следующие действия:
∙Ввод с клавиатуры данных из 10 записей типа STUDENT, и занесение их в файл данных;
∙Чтение данных из файла и вывод их на экран;
∙Вывод на экран фамилий и номеров групп для всех студентов, имеющих оценки 4 и 5 (если таких нет – вывести об этом сообщение);
∙Список должен быть упорядочен по величине среднего балла.
4-3. Дана запись с именем STUDENT, содержащая следующие поля:
∙Фамилия и инициалы;
∙Номер группы;
∙Успеваемость (массив из пяти элементов);
Написать программу, которая выполняет следующие действия:
59
∙Ввод с клавиатуры данных из 10 записей типа STUDENT, и занесение их в файл данных;
∙Чтение данных из файла и вывод их на экран;
∙Вывод на экран фамилий и номеров групп для всех студентов, имеющих хотя бы одну оценку 2 (если таких нет – вывести об этом сообщение);
Список студентов должен быть упорядочен по алфавиту фамилий.
4-4. Дана запись с именем AEROFLOT, содержащая следующие поля:
∙Название пункта назначения рейса;
∙Номер рейса;
∙Тип самолета.
Написать программу, которая выполняет следующие действия:
∙Ввод с клавиатуры данных из 7 элементов типа AEROFLOT, и занесение их в файл данных;
∙Чтение данных из файла и вывод их на экран;
∙Вывод на экран номеров рейсов и типов самолетов, вылетающих в пункт назначения, название которого совпало с названием, введенным с клавиатуры (если таких нет – вывести об этом сообщение);
∙Список должен быть упорядочен по возрастанию номера рейса.
4-5. Дана запись с именем AEROFLOT, содержащая следующие поля:
∙Название пункта назначения рейса,
∙Номер рейса,
∙Тип самолета
Написать программу, которая выполняет следующие действия:
∙Ввод с клавиатуры из 7 элементов типа AEROFLOT, и занесение их в файл данных
∙Чтение данных из файла и вывод их на экран
∙вывод на экран пунктов назначения и номеров рейсов, обслуживаемых самолетом, тип которого введен с клавиатуры (если таких нет – вывести об этом сообщение)
60
∙ Список должен быть упорядочен по алфавиту названий пунктов назначения.
4-6. ДаназаписьсименемWORKER, содержащаяследующиеполя:
∙Фамилия и инициалы работника;
∙Название занимаемой должности;
∙Год поступления на работу.
Написать программу, которая выполняет следующие действия:
∙Ввод с клавиатуры данных из 10 элементов типа WORKER, и занесение их в файл данных;
∙Чтение данных из файла и вывод их на экран;
∙вывод на экран фамилий работников, чей стаж работы в организации превышает значение, введенное с клавиатуры (если таких нет – вывести об этом сообщение);
∙Список должен быть упорядочен по алфавиту фамилий.
4-7. Дана запись с именем TRAIN, содержащая следующие поля:
∙Название пункта назначения;
∙Номер поезда;
∙Время отправления.
Написать программу, которая выполняет следующие действия:
∙Ввод с клавиатуры данных из 8 элементов типа TRAIN, и занесение их в файл данных;
∙Чтение данных из файла и вывод их на экран;
∙вывод на экран информации о поездах, отправляющихся после введенного с клавиатуры времени (если таких нет – вывести об этом сообщение);
∙Список должен быть упорядочен по алфавиту пунктов назначения.
4-8. Дана запись с именем TRAIN, содержащая следующие поля:
∙Название пункта назначения;
∙Номер поезда;
∙Время отправления.