Реферат Спецификация программы
Работа добавлена на сайт bukvasha.net: 2015-10-28Поможем написать учебную работу
Если у вас возникли сложности с курсовой, контрольной, дипломной, рефератом, отчетом по практике, научно-исследовательской и любой другой работой - мы готовы помочь.
от 25%
договор
ФЕДЕРАЛЬНОЕ АГЕНТСТВО ПО ОБРАЗОВАНИЮ РФ
Государственное образовательное учреждение
высшего профессионального образования
ВЯТСКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ
Факультет прикладной математики и телекоммуникаций
КАФЕДРА РЭС
Отчёт по дисциплине «Информатика»
Индивидуальное задание № 205
ТПЖА.12120-01 90 01-1
Разработал: студент гр. ПС-11 ____________ /Скопина К.Э./
(подпись)
Проверил: ст. преподаватель ____________ /Наумович Т.В./
(подпись)
Дата: «___» _____________
Киров 2008
СОДЕРЖАНИЕ
1.Текст задания………………………………………………………………….3
2 Спецификация программы………………………………………….............4
3 Текст программы………………………………………………………..........5
4 Схемы алгоритмов……………………………………………………............9
5 Реализация программы……………………………………………………..17
1 Текст задания
Даны натуральное число N, действительные числа а[1], ... ,а[n]. Получить максимальный элемент (а[1], ... ,а[n]). Вычислить:
Данная задача может быть сформулирована, как последовательность действий:
1. Ввести в компьютер, например, с экрана дисплея числовые значения N, равное количеству элементов одномерного массива;
2. ввести в компьютер с экрана дисплея числовые значения элементов массива a[1], a[2]…a[n];
3. найти максимальный элемент среди элементов массива;
4. вывести обозначение максимального число max с его числовым значениям;
5. посчитать значение выражения F по формуле;
6. вывести обозначение выражения F с его числовым значением;
Программу разработать, используя динамическое распределение памяти для хранения исходной матрицы.
Предусмотреть вывод на экран матрицы, значение максимального элемента, значение функции F, а также проверку данных на соответствие диапазону, предусматриваемому для данного типа данных.
Входные данные:
N может принимать значения от 1 до 100.
а[N] может принимать значения от -3,4*e38 до 3,4*e38.
Выходные данные:
Размерность массива N = 7
Заданный массив:
5 -3 2 18 8 7 -14
Результат: Max=18
F=671
2 Спецификация программы
При запуске программы пользователю предлагается ввести числа N – размерность массива и числа a1, … , an – элементы массива a[n]. В программе ввода числа предусмотрен контроль от ввода некорректных данных. Далее предусмотрен эхо-контроль (печать введенного числа). Далее программа производит выводит сформированный массив. Затем выполняет поиск максимального элемента массива, и выводит на экран значение этого элемента, затем происходит вычисление функции и выводит ее значение на экран.
После получения результата работы программы пользователю выдается сообщение: «Для продолжения нажмите клавишу 'Y'». Если пользователь желает продолжить работу необходимо нажать клавишу ‘Y’ и выполнение программы начнется заново. Прервать работу программы можно нажав клавишу ‘ESC’.
Конструктивно программа выполнена в виде четырех вызываемых функций и одной основной функции main(), которая осуществляет управление вызываемыми функциями и поддерживает диалог с пользователем.
Вызываемые функции:
int int_shild(); Функция защиты от некорректного
ввода
double protect(double maxnum,double minnum); Функция защиты от некорректного
ввода
void func1(int n, double *s); Функция выполнения условия задачи
void massiv(); Функция ввода массива
Входные данные программы приведены в таблице 1.
Выходные данные программы приведены в таблице 2.
Таблица 1-Входные данные
const int N=100;
double *a;
int n,F=0,nmax=0;
char ch;
тип | Идентификатор | Диапазон | назначение |
unsigned char | ch | 0 … 255 | Ответ на запрос продолжения программы |
unsigned int | N | 0 … 100 | Размерность массива |
double | a[n] | -3.4*e38 … 3.4*e38 | Элементы массива |
Таблица 2-Выходные данные
тип | Идентификатор | Диапазон | назначение |
unsigned int | a[nmax] | -3.4*e38 … 3.4*e38 | Максимальный элемент массива |
unsigned int | F | 0 … 3.4*e38 | Значение функции(см.текст задания) |
3 Текст программы
#include "stdafx.h"
#include <stdio.h>
#include <math.h>
#include <conio.h>
#include <stdlib.h>
#include <iostream>
#include <windows.h>
#include <float.h>
using namespace std;
int int_shild();
double protect(double maxnum,double minnum);
void func1(int n, double *s);
void massiv();
char buf[1024];
char * r(char * txt)
{
CharToOemA(txt, buf);
return buf;
}
int main()
{
char ch;
printf("\n---------------------ZADANIE -------------------------\n");
printf("\nDany natural'noe chislo N, deystvitel'nye chisla");
printf("\n a[1], ... , a[n]. Poluchit' max (a[1],...,a[n]) ");
printf("\n Vi4islit' (a[1]^2+...+a[n]^2)");
printf("\n");
printf("------------------------------------------------------");
printf(r("\nНажмите любую клавишу...\n"));
_getch();
do
{
massiv();
printf ("\n");
printf (r("Хотите: Y-продолжить ; N-завершить???"));
do
{
ch=_getch();
if( (ch=='y')||(ch=='n') )
printf("%c\n",ch);
}
while (ch!='y' && ch!='Y' && ch!='n' && ch!='N');
}
while (ch!='n' && ch!='N');
printf("\n");
printf(" <<<Rabota programmy zavershena>>>");
printf("\n-------------------------------------------------------");
printf("\n Rabotu vypolnila studentka gruppy PS-11");
printf("\n Skopina Kristina");
printf("\n");
printf(r("\nНажмите любую клавишу...\n"));
_getch();
return 0;
}
//******************************************************************
//функция матрицы
//******************************************************************
void func1(int n, double *s)
{int nmax=0;
double F=0;
for (int i = 0; i <n; i++) //нахождение максимального элемента
{
if ((s[i]) > (s[nmax])) s[nmax]= s[i];
F+=(s[i] * s[i]); //функция
}
printf("\n\nznachenie max elementa = ");
printf("%5.2f",s[nmax]);
printf("\n\nvi4islenie zna4enija funkcii");
printf("\n F = " );
printf("%20.6lg",F);
}
void massiv()
{int n=0,i=0,j=0;
double *s;
s=(double*)realloc(0,sizeof(double*)*n);
printf(r("\nВведите размерность массива(от 0 до 100): "));
n=int_shild();
printf(r("\nВведите значения массива(от %lg до %lg :\n"),DBL_MIN, DBL_MAX ); //Ввод матрицы
for ( i=0; i<n; i++)
{printf("a[%d]= ",i);
s[i]=protect(DBL_MAX,DBL_MIN);
printf("\n");}
printf(r("\nИсходный массив:\n"));
for(i=0;i<n;i++)
{printf("a[%d]=%5.3lg\t",i,s[i]);//Вывод матрицы
}
func1(n,s);
}
//*****************************************************************
int int_shild()
{
char a[2]={0},x=0;
int q=0, i=0;
do {
x=_getch();
if (x>=48 && x<=57 && i<2)
{printf ("%c",x);
a[i]=x;
i++;}
if (x==8 && i>0)
{printf ("%c %c",8,8);
i--;
a[i]=0;}
q=atoi (a);
}while (x!=13 || q==0 || i==0);
return q;
}
//******************************************************************
//******************************************************************
//Функция защиты действительных чисел
//******************************************************************
double protect(double maxnum,double minnum)
{const int max=17;
int g=0, // флажек точки
k=0,// флажек "е"
m=0, // счетчик знаков до запятой
i=0,t; // счетчик знаков
char a[max]={0}, //числовой массив на 13 символов
x=0; // вводимое значение строки
double q=0; // переменная , отвечающая за выводимый результат
do {
t=i-1;
x=_getch();
if (x>=48 && x<=57 && i<max && m<8) //если ввeдены числа
{printf ("%c",x);
a[i]=x;
m++;i++;}
if (x==8 && i>0) // если нажата <BACKSPACE>
{
printf ("%c %c",8,8);
m--; i--;
if (a[i]=='.') {g=0;m=i;}
if (a[i]=='e') {k=0;t--;}
a[i]=0;
}
if (x==46 && i<max && g==0) // если нажата точка
{printf ("%c",x);
a[i]=x;
i++; m=0;g=1;}
if (x==45 && i==0) // если нажата клавиша "-"
{printf ("%c",x);
a[i]=x;
++m;++i;}
if (x==45 && a[t]=='e')
{
printf ("%c",x);
a[i]=x;
i++;m++;
}
if (x==101 && i>0 && i<max-1 && k==0 )//если нажата "е"
{
printf("%c",x);
a[i]=x;
m++; i++; k=1;
}
}
while (x!=13 || i==0); // делать пока не нажата клавиша <ENTER>
q=atof (a);//преобразуем массив строк в числовое значение
if(fabs(q)<minnum || fabs(q)>maxnum)
{ a[i]='\0';
for (int j=i;j>0;j--)
{ printf("\b \b");}
return protect(maxnum,minnum);// возвращаем прверку на условие вновь, если число выходит за рамки границ
}
else
return q; //возвращаем значение
}
4 Схемы алгоритмов
Рисунок 1 - Схема функции main( )
|
Рисунок 2 - Схема функции massiv( )
Рисунок 3 - Схема функции void func1(int n, double *s)
Рисунок 4 - Схема функции int_shild()
Рисунок 5 - Схема функции double protect(double maxnum,double minnum)
5 Реализация программы
Результат работы программы представлен на рисунке 6:
Рисунок 6 – Результат работы программы