Программирование на языке высокого уровня
Особенности вывода на экран содержимого файла BAZA.txt. Анализ функций вывода информации о количестве каждой марки машин. Рассмотрение способов проектирования тестов программы методами черного ящика. Проблемы программирования на языке высокого уровня.
Рубрика | Программирование, компьютеры и кибернетика |
Вид | контрольная работа |
Язык | русский |
Дата добавления | 04.01.2015 |
Размер файла | 1,6 M |
Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже
Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.
Размещено на http://www.allbest.ru/
1. Задание
Дан файл, состоящий сведения о владельцах автомобилей. Структура записи файла:
· Фамилия и инициалы владельца
· Марка автомобиля
· Номер автомобиля
Написать программу, которая печатает
ь Фамилию владельца автомобиля с заданным номером
ь Фамилии владельцев и номера автомобиля данной марки (в алфавитном порядке)
ь Количество автомобилей каждой марки
2. Описание применения
2.1 Запуск программы
Запуск программы (файл proga.cpp) можно выполнить из среды TurboC 3.0 (или Dev-Cpp) либо из командной строки MSDOS, введя proga.exe
2.2 Входные данные
Входные данные программы находятся в созданном файле. Число строк в файле - произвольное. Каждая строка содержит информацию о владельцах(до 17 символов), марку автомобилей (до 7 символов), номера автомобилей(6 символов). Пример строки файла:
Ignatev A.S. Nissan P990CC
Пример входного файла приведен в приложении 2. По запросу программы с клавиатуры необходимо ввести номер пункта меню (см. раздел 2.3).
2.3 Выходные данные
Программа выводит на экран меню, представленное на рисунке 1 :
Рис.1
Привыборепункта2наэкранвыводитсясообщение:
Vveditenomermashini
После ввода номера машины например P990CC выводится результат представленный на рисунке 2 :
Рис. 2
Примеры выходных данных для остальных пунктов меню см. в приложении 3.
2.4 Сообщения программы
Ниже приводится перечень возможных сообщений программы:
1. faila BAZA net
2. Vibirete nomer punkta menu
3. marki «…» net
4. Dlya vihoda v menu najmite lubyu knopky
5. vvedite nomer mashini
6. Nomer vveden ne pravelno
7. vvedite marku mashini
8. Vvidite nomer ot 1 do 5
3. Описание программы
3.1 Метод решения задачи
Задачу можно разбить на четыре отдельные подзадачи:
Вывод на экран содержимого файла BAZA.txt
Поиск по номерам
Поиск владельца и номера по марке
Количество автомобилей каждой марки
Чтобы пользователь мог выбирать, какие подзадачи решать и в каком порядке, программа выводит на экран меню (см. Рис. 1).
3.2 Структура программы
Рис.3. Функциональная структура программы
Программа состоит из шести функций: главной функции main и пяти подпрограмм:
SORT - сортировка файла по времени отправления
PUN1 - функция вывода файла по десять строк
PUN2 - функция вывода информации о владельце и марке
PUN3 - функция вывода информации о владельце и номере
PUN4 - функция вывода информации о количестве каждой марки машин
3.3 Описание функций
3.3.1 main - главная функция
Заголовок функции:
intmain ()
Значение функции:
0 - в если входной файл не найден;
1 - в случае успешного завершения
Рабочие данные:
f - указатель на структуру с информацией о входном файле;
n - номер пункта меню.
Рис.4. Блок-схема функции main()
3.3.2 PUN1- функция вывода файла по десять строк
Заголовокфункции:
voidPUN1 (TAB *pz, intl);
Рис.5. Блок-схема функцииPUN1 (TAB *tab, intl)
3.3.3 PUN2 - функция вывода информации о владельце и марке
Заголовок функции:
voidPUN2 (TAB *tab, intl)
Рабочие данные:
r-введенный номер
i,j,p,u-счетчики
Рис.6. Блок-схема функции PUN2 (TAB *tab, intl)
3.3.4 PUN3 - функция вывода информации о владельце и номере
Заголовок функции:
voidPUN3(TAB *tab, intl)
Рабочие данные:
i, j, z, t-счетчик
mar[]-введенная марка машины
Рис.7. Блок-схема функции PUN3 (TAB *tab, intl)
3.3.5 PUN4 - функция вывода информации о количестве каждой марки машин
Заголовок функции:
voidPUN4(TAB *tab, intl)
Рабочие данные:
w-количество машин
z,j - счетчики
Рис.8. Блок-схема функции PUN5(TAB *tab, intl)
3.3.6 SORT - сортировка файла
Заголовок функции:
void SORT (TAB *pz, int l)
Рис.9. Блок-схема функции SORT (TAB *pz, int l)
4. Отладка программы
4.1 Проектирование тестов
4.1.1 Тесты черного ящика
Для проектирования тестов программы методами черного ящика [1] с помощью эквивалентного разбиения входных/выходных данных на области (классы) эквивалентности составлен список ситуаций, каждая из которых должна создаваться хотя бы одним тестом. Тестовые ситуации приведены в табл. 4.1, в скобках указаны их номера.
Таблица 4.1 Области входных/выходных данных тестов программы
Входное/выходное условие (значение) |
"Правильные" классы эквивалентности |
"Неправильные" ¦ классы эквивалентности |
|
Номер пункта меню |
1..5(1) |
<1 (2), >5 (3) |
|
Входной файл |
существует (4), |
не существует (5) |
|
Номер машины |
существует (6), не найден(7) |
Введен не правильно(8) |
|
Марка машины |
существует (9), не найдена |
Для создания перечисленных тестовых ситуаций разработаны тесты, представленные в табл. 4.2. Входные и выходные данные тестов по возможности выбирались ближе к границам классов эквивалентности.
файл программирование черный ящик
Таблица 4.2. Тесты черного ящика для отладки программы
Вход |
Выход |
Осн. сит. |
||
1 |
Номер пункта меню n=9 |
Нужно вводить номера от 1 до 5 |
3 |
|
2 |
Номер пункта меню n=1 |
Вызов функции PUN1(pz, l) |
1 |
|
3 |
Номер пункта меню n=0 |
Нужно вводить номера от 1 до 5 |
2 |
|
4 |
Входной файл существует |
Меню |
4 |
|
5 |
Входной файл не существует |
Файл «BAZA.txt» не найден |
5 |
|
6 |
T890AA |
Вывод информации о машине |
6 |
|
7 |
С055PM |
Информация о машина не найдена |
7 |
|
8 |
Т5555В |
Не корректно введен номер |
8 |
|
9 |
Lada |
Вывод информации о владельцах этой марки |
9 |
|
10 |
KIA |
Информации о владельцах этой марки нет |
10 |
4.1.2 Тесты белого ящика
Разработанные тесты проверены методами белого ящика [1] по критериям охвата основных путей выполнения алгоритмов модулей. В программе имеются составные условия. Поэтому использован критерий комбинаторного покрытия условий (см. табл. 4.3).
Таблица 4.3. Комбинаторное покрытие условий тестами черного ящика
Модуль |
Элементарное условие |
Номера тестов |
||
Истина |
Ложь |
|||
main |
if((n>'0')&&(n<'5')) |
1 |
2, 3 |
|
main |
if(file==NULL) |
5 |
4 |
|
PUN2 |
for(j=0;j<6;j++) {if ((j==0)||(j==4)||(j==5)) {if ((r[j]<'A')||(r[j]>'Z')) p++;} else if ((r[j]<'0')||(r[j]>'9')) p++; } |
6,7 |
8 |
|
PUN3 |
if(strcmp(tab[j].marka,mar)==0) |
9,10 |
Литература
1. Хохлов Д.Г. Основы технологии модульного программирования. Учебное пособие. - Казань. Изд-во Казан. гос. техн. ун-та , 2005. - 63 с.
2. Хохлов Д.Г. Структуры данных и комбинаторные алгоритмы. Учебное пособие. - Казань: Изд-во Казан. гос. техн. ун-та, 2005. - 102 с.
3. Хохлов Д.Г., Захарова З.Х. Практикум по структурам данных и комбинаторным алгоритмам: Учебное пособие.- Казань: Изд-во Казан. гос. техн. ун-та, 2005. - 48 с.
4. Бикмурзина А.Р. Лабораторный практикум по программированию. - Казань: Изд-во Казан. гос. техн. ун-та, 2000г.
Приложение 1
Текст программы
#include<stdio.h>
#include <conio.h>
#include <string.h>
#include <stdlib.h>
#include <math.h>
#define MAX 100
struct BAZA
{
char fio[20];
char marka[10];
char nomer[9];
};
struct TAB
{
char fio[20];
char marka[10];
char nomer[9];
};
void SORT (TAB *tab, int l);
void PUN1 (TAB *tab, int l);
void PUN2 (TAB *tab, int l);
void PUN3 (TAB *tab, int l);
void PUN4 (TAB *tab, int l);
int main()
{ FILE *f;
struct BAZA b;
struct TAB tab[MAX];
char n;
int l=0, i, s, nomer;
if ((f=fopen("BAZA.txt","r"))==NULL)
{puts ("faila poezd net");
getch();
return 0;
}
while (fgets((char*)&b,sizeof(struct BAZA),f)!=NULL)
{
b.fio[19]='\0';
strcpy(tab[l].fio, b.fio);
b.marka[9]='\0';
strcpy(tab[l].marka, b.marka);
b.nomer[8]='\0';
strcpy(tab[l].nomer, b.nomer);
l++;
}
SORT (tab, l);
do
{ //clrscr();
system("cls");
puts("---------------------------------------------------------------------");
puts("Vibirete nomer punkta menu:");
puts("1-polnaya informazia o vladelcah");
puts("2-poisk po nomeru");
puts("3-poisk vladelca i nomera po marke");
puts("4-kolichestvo avtomobilei kajdoi marki");
puts("5-vihod");
puts("---------------------------------------------------------------------");
n=getche();
switch(n)
{ case '1':PUN1(tab, l);break;
case '2':PUN2(tab, l);break;
case '3':PUN3(tab, l);break;
case '4':PUN4(tab, l);break;
case '5':break;
default:puts("Vvidite nomer ot 1 do 5");
}
if(n!='5')
{puts("\n\n\n Dlya vihoda v menu najmite lubyu knopky");
getch();
}
}
while(n!='5');
fclose(f);
return 1;
}
void PUN1 (TAB *tab, int l)
{int j=0, z=1;
do
{ //clrscr();
system("cls");
puts("\n Familia I.O. | Marka | Nomer ");
puts("------------------------------------------");
for (j;j<l; j++)
{ if (j<(10*z))
printf ("\n %s | %s | %s", tab[j].fio, tab[j].marka, tab[j].nomer);
else
{ z++;
puts("\nNajmite lubyu knopky chto bi vivesti sled 10");getch();
break;
system("cls");
}
}
}
while (l>j);
}
void PUN2(TAB *tab, int l)
{int j, u=0,i,z=0;
double p=0;
char r[9];
//clrscr();
system("cls");
puts("\nvvedite nomer mashini\n");
gets(r);
//clrscr();
system("cls");
for(j=0;j<6;j++)
{
if ((j==0)||(j==4)||(j==5))
{if ((r[j]<'A')||(r[j]>'Z'))
p++;}
else
if ((r[j]<'0')||(r[j]>'9'))
p++;
}
if (p==0)
{ puts("\n Familia I.O. | Marka | Nomer ");
puts("------------------------------------------");
for (i=0; i<l; i++)
{ z=0;
for (j=0; j<6; j++)
{if (tab[i].nomer[j]==r[j])
{z++; }
}
if (z==6)
{ printf ("\n %s | %s | %s", tab[i].fio, tab[i].marka, tab[i].nomer);u++;}
}
if (u==0)
{//clrscr();
system("cls");
puts("Takogo nomera net");}
}
else
puts("Nomer vveden ne pravelno");
}
void PUN3(TAB *tab, int l)
{ int i, j, z=0, t=0, n;
char mar[20];
// clrscr();
system("cls");
puts ("vvedite marky mashini");
gets(mar);
n=strlen(mar);
// clrscr();
system("cls");
puts("\n Familia I.O. | Marka | Nomer ");
puts("------------------------------------------");
for (j=0; j<l; j++, z=0)
{ for (i=0; i<n; i++)
{if (tab[j].marka[i]==mar[i])
{z++; }
}
if (tab[j].marka[i]==' ' || tab[j].marka[i]=='\0')
{ if (z==n)
{ printf ("\n %s | %s | %s", tab[j].fio, tab[j].marka, tab[j].nomer);
t++;
}
}
}
if (t==0)
{ //clrscr();
system("cls");
printf ("\nmarki %s net", mar);
}
}
void PUN4(TAB *tab, int l)
{
char mar[10];
int z=0,j,i,q;
double w=1;
system("cls");
//q=strlen(tab[0].marka);
//strcpy(mar,tab[0].marka);
puts("\n Marka | Kolichestvo ");
for (j=0; j<l; j++)
{ if(strcmp(tab[j+1].marka,tab[j].marka)>0)
{printf("\n %s | %.0f", tab[j].marka, w);
w=1;
/*strcpy(mar,tab[j].marka);
j--*/}
else
{
w++;
}
}
}
void SORT (TAB *tab, int l)
{ int i, j;
double t;
char fio[20], mar[10], nomer [7];
for(i = 0 ; i < l ; i++)
{ for(j = 0 ; j < l - i - 1 ; j++)
{ for (t = 0 ; t < 10 ; t++)
if (strcmp(tab[j].marka,tab[j+1].marka)>0)
{
strcpy(fio,tab[j].fio); strcpy(tab[j].fio,tab[j+1].fio); strcpy(tab[j+1].fio,fio);
strcpy(mar,tab[j].marka); strcpy(tab[j].marka,tab[j+1].marka); strcpy(tab[j+1].marka,mar);
strcpy(nomer,tab[j].nomer); strcpy(tab[j].nomer,tab[j+1].nomer); strcpy(tab[j+1].nomer,nomer);
}
}
}
}
Приложение 2
Пример входного файла poezd.txt
IvanovA.P. ToyotaB540CT
IgnatevA.S. NissanP990CC
SamigullinA.A. NissanB571BP
PetrovA.A. LadaC111CC
SimonovI.I. HummerC777CX
AbramovA.A. LadaC415TO
HaritonovA.V. DachaC789TO
HafizovA.Z. RenaultT894TO
IvanovA.I. LadaT561BE
HaritinovI.G. LotusB565BO
GaliyllinT.B. HondaC717CO
Nyrmyhametiv I.F. Lada C556TO
Antipova E.G. Opel C413EO
Valieva M.A. Toyota P891XO
Ivanov M.D. Lada X013PX
Haliyllin M.I. Nissan B670PO
Haliyllin T.I. Honda X518TO
Grigorev G.I. Lada P533TO
Garimov V.A. Nissan T560TT
Vasileva D.R. Cherry C660TO
Talov I.A. Lada T781TP
Pogylov A.I. Dacha A617AE
Hasaeva G.D. Honda A415BO
Ignatev P.S. Renault O819TO
Alternov A.S. LotusT890AA
Приложение 3
Результаты тестирования программы
Тест 1. Входного файла нет в текущем каталоге.
Результат:
faila BAZA net
В следующих тестах используется файл из приложения 2.
Тест 2.
Рис.
Выбираем пункт 1:
Рис.
Рис.
Рис.
Тест3
Рис.
Выбираем пункт 2:
Номер машини Р990СС
Рис.
Тест4 .
Рис.
Выбираем пункт 3:
Название марки автомобиля: Nissan
Рис.
Тест5
Рис.
Выбираем пункт 4:
Количество автомобилей каждой марки
Рис.
Тест 6 . Неверно выбран номер пункта меню
Рис.
Выбираем не существующий пункт, к примеру 6
Рис.
Размещено на Allbest.ru
Подобные документы
Методы численного интегрирования. Характеристика основных составляющих структурного программирования. Решение задания на языке высокого уровня Паскаль. Построение графического решения задачи в пакете Matlab. Решение задания на языке высокого уровня C.
курсовая работа [381,7 K], добавлен 10.05.2018Входные данные программы в файле "School.txt". Метод решения задачи и функциональная структура программы. Main – главная функция, формирование таблицы данных из файла. Блок-схема функции вывода фамилии победителей, занявших первые три призовых места.
курсовая работа [68,4 K], добавлен 17.06.2012Характеристика базовых конструкций языков программирования. Изучение истории их развития и классификации. Определение основных понятий языков программирования. Описание основных операторов, которые используются в языках программирования высокого уровня.
курсовая работа [400,6 K], добавлен 10.11.2016Информационные технологии и защиты данных. Методы защиты информации. Виды информационной безопасности и умышленные угрозы. Программирование на языке Turbo Pascal. Типы числовых данных. Функции ввода и вывода. Логические операторы, символьные переменные.
курсовая работа [1,7 M], добавлен 16.05.2016Рассмотрение правил записи, способов ввода и вывода, использования функций обработки символьных данных в Pascal. Описание алгоритмизации и программирования файловых структур данных, проектирования структуры файла. Ознакомление с работой данных массива.
курсовая работа [336,2 K], добавлен 27.06.2015Исследование классификации компьютерных игр, двигателей прогресса индустрии для персональных компьютеров. Характеристика общей структуры, протокола и текста программы, сценария и процесса игры. Изучение алгоритмизации и программирования на языке Паскаль.
реферат [2,1 M], добавлен 16.09.2011Основные этапы определения радиуса и центра окружности, проходящей через три различные точки заданного множества точек. Особенности построения алгоритма на языке программирования. Составление тестовых примеров для демонстрации возможностей программы.
контрольная работа [103,9 K], добавлен 21.08.2013Методы языка программирования C#. Алгоритмизация и программирование задач на языке высокого уровня C#. Внутренний цикл, ветвление, внешний цикл, вложенные друг в друга структуры ветвления. Вывод элементов массива на экран. Остальные элементы матрицы.
курсовая работа [250,2 K], добавлен 27.02.2015Сравнительный анализ наиболее распространенных языков, их классификация, описание достоинств и недостатков. Использование процедур, функции и подпрограмм в языках программирования высокого уровня. Разработка и реализация программы "Бортовой компьютер".
курсовая работа [329,8 K], добавлен 22.06.2014Классификация языков программирования. Использование циклических конструкций и выполнение итерационных процессов. Алгоритмические структуры циклов языков C, C++, Java, C#. Особенности современных языков программирования высокого уровня и их применение.
курсовая работа [345,6 K], добавлен 13.11.2009