Автор: Пользователь скрыл имя, 18 Февраля 2013 в 19:52, лабораторная работа
Написать программу, которая вводит текст, состоящий из нескольких предложений, и выводит его на экран, меняя местами каждые два соседних слова.
1.2. Анализ технического задания
Для данной программы воспользуемся методом Substring, который позволит извлечь из строки подстроку (первый параметр означает, с какого места извлекаем (нумерация с нуля), а второй - сколько символов извлекаем). И методом Remove, который удаляет символы из строки (первый параметр - это с какой позиции удаляем (нумерация с нуля), второй - сколько символов удаляем).
Филиал
федерального государственного бюджетного
образовательного учреждения высшего
профессионального образования
'' НАЦИОНАЛЬНЫЙ ИССЛЕДОВАТЕЛЬСКИЙ УНИВЕРСИТЕТ
'' МЭИ ''
в городе Смоленске
Кафедра вычислительной техники
Отчет
по лабораторной работе №3
по курсу «Технология программирования»
Тема: «Работа с файлами в С#»
Группа: ВМ-09
Студент: Кузнецова Н.А.
Преподаватель: Панкратова Е.А.
Вариант: 5
Смоленск 2012
1.2. Анализ технического задания
Для данной программы воспользуемся методом Substring, который позволит извлечь из строки подстроку (первый параметр означает, с какого места извлекаем (нумерация с нуля), а второй - сколько символов извлекаем). И методом Remove, который удаляет символы из строки (первый параметр - это с какой позиции удаляем (нумерация с нуля), второй - сколько символов удаляем).
В поле textBox1 будем вводить предложения. А в поле textBox2 по нажатию кнопки Button1 будет выводиться результат.
Рисунок 1.1 - Блок-схема процедуры выполнения задания
1.4. Текст программы
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
namespace WindowsApplication1
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
string s, s1, s2,s3;
int k=0;
s = "";
s1 = "";
s2 = "";
s3 = "";
s =' '+ textBox1.Text+' ';
int nom = s.Length;
for (int i = 0; i < s.Length; i++)
{
if (s[i] == ' ')
{
int q = i;
if (s1=="")
{
s1 = s.Substring(0,q);
i = 0;
s3=s1;
}
else
{
textBox2.Text += s.Substring(0,q);
i = 0;
textBox2.Text +=s1;
s1 = "";
}
s = s.Remove(0, q);
//textBox1.Text = s;
}
}
s2=textBox2.Text;
if (s2.Length != nom)
textBox2.Text=s2+s3;
}
}
}
1.5. Результаты функционального тестирования
При корректно введенных данных в поле textBox1 программа работает верно:
введем следующий текст: «Достаточно смены декораций, и все сразу может измениться — ход времени, поток эмоций. Xapуки Мураками.»
- при вводе лишних пробелов и enter программа работает неправильно:
- при вводе некорректных данных и enter программа работает нормально:
Рисунок 1.2 – Результаты тестирования
1.6. Оценка приложения
1.6.1 Оценка характеристик
Таблица 1 - Текст программы
Номер строки |
Строки программы |
1 |
using System; |
2 |
using System.Collections.Generic; |
3 |
using System.ComponentModel; |
4 |
using System.Data; |
5 |
using System.Drawing; |
6 |
using System.Text; |
7 |
using System.Windows.Forms; |
8 |
namespace WindowsApplication1 |
9 |
{ |
10 |
public partial class Form1 : Form |
11 |
{ |
12 |
public Form1() |
13 |
{ |
14 |
InitializeComponent(); |
15 |
} |
16 |
private void button1_Click(object sender, EventArgs e) |
17 |
{ |
18 |
string s, s1, s2,s3; |
19 |
int k=0; |
20 |
s = ""; |
21 |
s1 = ""; |
22 |
s2 = ""; |
23 |
s3 = ""; |
24 |
s =' '+ textBox1.Text+' '; |
25 |
int nom = s.Length; |
26 |
for (int i = 0; i < s.Length; i++) |
27 |
{ |
28 |
if (s[i] == ' ') |
29 |
{ |
30 |
int q = i; |
31 |
if (s1=="") |
32 |
{ |
33 |
s1 = s.Substring(0,q); |
34 |
i = 0; |
35 |
s3=s1; |
36 |
} |
37 |
else |
38 |
{ |
39 |
textBox2.Text += s.Substring(0,q); |
40 |
i = 0; |
41 |
textBox2.Text +=s1; |
42 |
s1 = ""; |
43 |
} |
44 |
s = s.Remove(0, q); |
45 |
} |
46 |
} |
47 |
s2=textBox2.Text; |
48 |
if (s2.Length != nom) |
49 |
textBox2.Text=s2+s3; |
50 |
} |
51 |
} |
52 |
} |
Учитывая основные метрические характеристики для программы, для данного текста программы определим:
Таблица 2 - Словарь операторов и операций программы
№ пп |
Операторы, операции |
Номера строк |
Кол-во повтор-ий |
1 |
using...; |
1 - 7 |
7 |
2 |
namespace ... |
8 |
1 |
3 |
class ... |
10 |
1 |
4 |
private void... |
16 |
1 |
5 |
string |
18 |
4 |
6 |
int |
19, 25, 26, 30 |
4 |
7 |
for |
26 |
1 |
8 |
if |
28, 31, 48 |
3 |
9 |
== |
28, 31 |
2 |
10 |
+= |
39, 41 |
2 |
11 |
!= |
48 |
1 |
12 |
, |
18, 33, 39, 44 |
6 |
13 |
; |
1-7, 18-25, 30, 33-35, 39-42, 47, 49 |
27 |
14 |
= |
19-26, 30, 33-35, 40, 42, 44, 47, 49 |
17 |
15 |
+ |
24, 49 |
2 |
16 |
++ |
26 |
1 |
17 |
{} |
9(52), 11(51), 13(15), 17(50), 27(46), 29(45), 32(36), 38(43) |
16 |
18 |
() |
12, 14, 16, 26, 28, 31, 33, 39, 44, 48 |
20 |
19 |
. |
2-7, 24-26, 33, 39, 41, 44, 47-49 |
19 |
|
Определим значения характеристик LIF, LLoop, Lmod, f, L, Cl и cl.
Значение характеристики LIF определяется количеством используемых в программе операторов if . В представленном решении их три (см. таблицу 2, пункт 8).
Значение характеристики LLoop определяется количеством используемых в программе циклов. В исходном тексте данной программы содержится один цикл: оператор for (см. таблицу 2, пункт 7).
Значение характеристики Lmod определяется количеством используемых в программе модулей в решении. В представленном решении используется два программных модуля, которые оперделяется следующими строками:
public partial class Form1 : Form (см. таблицу 2, пункт 3).
private void button1_Click (см. таблицу 2, пункт 4).
Общее количество операторов условия 4, из них 3 оператора if и 1 оператор цикла. Общее число всех используемых операторов L=135 (см. таблицу 2).
Таким образом:
CL = 4 – абсолютная сложность программы;
Cl = CL/L = 4/135 = 0,029.
Количество связей между модулями Nsv равно двум – по одной связи между основным и каждым из дополнительных модулей. Отношение числа связей к числу модулей определяется следующим образом:
Из полученных результатов анализа текста программы следует, что исходный код имеет невысокую сложность, так как на 135 оператора текста приходится всего лишь 4 оператора условий. Общее число программных модулей решения также невелико (3 модуля), что подтверждает низкий уровень сложности программы.
1.6.2 Оценка характеристик
Выполним оценку качества программы с помощью метрики Чепина, которая позволяет оценить меру трудности понимания программы на основе входных и выходных данных. Все множество переменных, составляющих список ввода-вывода, разбивается на четыре функциональные группы:
В таблице 3 приведен анализ исходного текста программы
Таблица 3 – Анализ исходного кода программы
№ п/п |
Наименование переменных |
Номера строк |
Р ( для расчетов и для обеспечения вывода) | ||
1 |
s |
18 |
М ( модифицируемые или создаваемые внутри программы переменные) | ||
1 |
s1 |
18 |
2 |
s2 |
18 |
3 |
s3 |
18 |
4 |
k |
19 |
5 |
i |
26 |
6 |
q |
30 |
C (управляющие переменные) | ||
Отсутствуют |
||
T (не используемые в программе переменные) | ||
Отсутствуют |
Переменная s используется в качестве исходных данных.
Переменные s1, s2, s3, k, i и q в процессе выполнения программы создаются и модифицируются.
Таким образом, исходя из результатов анализа исходного текста программы, получаем следующие значения характеристик:
М = 6 - количество модифицируемых переменных;
Расчет метрики Чепина:
Q = P + 2M + 3C + 0,5T = 1 + 2*6 + 3*0 + 0,5*0 = 13.
На основе полученных значений метрики Чепина уровень сложности данного решения можно считать сравнительно низким, как так в исходном тексте программы используется незначительное количество переменных, что не затрудняет понимание программы.
2. Работа с функциями класса StringBuilder
2.1. Техническое задание
Дан текст. Составить программу проверки правильности написания сочетаний «жи», «ши», «ча», «ща», «чу» и «щу». Исправить ошибки.
2.2. Анализ технического задания
В поле textBox1 будем выводить текст с ошибками, а в поле textBox2 будет его выводить с исправлениями. Для поиска ошибок воспользуемся конструкцией switch()case: будем просматривать по два символа.
Рисунок 2.1 - Блок-схема выполнения public void TextChange
2.4. Текст программы
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
namespace WindowsApplication1
{
public partial class Form1 : Form
{
string s;
public Form1()
{
InitializeComponent();
}
// Кнопка "Добавить текст"
private void button1_Click(object sender, EventArgs e)
{
textBox1.Text = "Жыраф, шыповник, чясто, рощя, чюдо, щюка, жывой. У розы колючие шыпы. У нас живет собака Рыжык.";
s = textBox1.Text;
}
// Кнопка "Исправить ошибки"
private void button2_Click(object sender, EventArgs e)
{
s = textBox1.Text + " ";
TextChange(s);
}
public void TextChange(string s)
{
textBox2.Clear();
for (int j = 0; j < s.Length; j++)