Студопедия — Севастополь – 2012
Студопедия Главная Случайная страница Обратная связь

Разделы: Автомобили Астрономия Биология География Дом и сад Другие языки Другое Информатика История Культура Литература Логика Математика Медицина Металлургия Механика Образование Охрана труда Педагогика Политика Право Психология Религия Риторика Социология Спорт Строительство Технология Туризм Физика Философия Финансы Химия Черчение Экология Экономика Электроника

Севастополь – 2012






(Вариант № 18)

Выполнил:

Студент группы И-21з

Емельянов К.Ю.

Проверил:

Шишкевич В.Е.

 


Цель работы: экспериментально исследовать теоретическую оценку трудоемкости алгоритма точного решения задачи о сумме методом полного перебора.

Вариант задания №18

Вариант Размерность вектора случайных чисел Максимальное случайное число в векторе Значение суммы (V)
       

Ход выполнения работы

В ходе выполнения работы были разработаны 3 процедуры: TaskSum – функция решения задачи о сумме, create_array – для генерации вектора псевдослучайных чисел и записи его в файл, create_array_manual – для ручного ввода значений вектора. Реализация процедуры create_array представлена на рис. 1, блок-схема – на рис.2.

void create_array(int Nmax,int *vector) { // Cоздание массива из Nmax псевдослучайных целых чисел величиной от 0 до 50 // массив записывается в файл Example_TA3.TXT, на экран выводим максимальное // целое   int i;//переменная цикла FILE *stream;//файл данных //Nmax соответствует размерности вектора stream = fopen("Example_TA2.TXT", "w+");//открываем файл для записи std::cout << std::endl <<"Maximal integer " << RAND_MAX << std::endl;//вывод максимально возможного числа printf("\n%d%s\n", Nmax, " random numbers from 0 to 50");//вывод справочного сообщения   for(i=0; i<Nmax; i++)//цикл вывода в файл и на экран элементов массива { vector[i]= rand() % 50;//генерация очередного случайного числа в диапазоне от 0 до 550 if ((i+1)%20!=0)//вывод по 20 чисел в ряд { printf("%d ", vector[i]); fprintf(stream,"%d ", vector[i]); } else { printf("%d\n", vector[i]); fprintf(stream,"%d\n", vector[i]); } } fclose(stream); }
Рис.1. Реализация процедуры create_array

 

Рис. 2. Блок-схема процедуры create_array

 

 

Реализация процедуры TaskSum представлена на рис. 3.

int TaskSum(int N, int V, int &flag, int *vector, int *counter) { int i,j,sum, cnt, MaxN; int iter = 0;   MaxN = int(pow((double)2,N)-1); iter++;   flag = 0; i=0;   iter++; while(i<N) { counter[i]=0; i++; iter+=3; }//end while(i<N) cnt = 1;   iter++; do { sum = 0; i=0; iter+=3;   while(i<N) { sum = sum+counter[i]*vector[i]; i++; iter+=3; }//end while (i<N) iter++;   if (sum== V) { flag=1; return iter; }//end if iter++;   j=N-1;   while((counter[j]==1)&&(j!=0)) { counter[j]=0; j = j-1; iter+=4; }//end while counter[j]==1 iter++;   counter[j]=1; iter++; cnt = cnt + 1; }//end do while(cnt<=MaxN); return iter; }//end TaskSum  
Рис. 3. Реализация процедуры TaskSum

Реализация процедуры create_array_manual представлена на рис. 4, блок-схема – на рис.5.

void create_array_manual(int N,int *vector) { FILE *stream; int temp;   std::cout << "Input the data!" << std::endl; stream = fopen("Example_TA3.TXT", "w+");//открываем файл для записи for(int i=0; i<N; i++) { if (fscanf(stdin, "%d", &temp)) printf("The integer read was: %i\n",temp); fprintf(stream,"%d ", vector[i]);   vector[i]=temp; }   fclose(stream); }  
Рис. 4. Реализация процедуры create_array_manual
Рис. 5. Блок-схема процедуры create_array_manual

 

На рис.6 представлен листинг основной части программы.

#include <conio.h> #include <math.h> #include <stdio.h> #include <stdlib.h> #include <iostream> #include "Lab3_TA_func.h" using namespace std;   #define SIZE   int vector[4]; //массив случайных чисел int counter[4]; //вспомогательный массив для определения элементов, дающих требуемую сумму int N=11, V=37; //констант N – размерность вектора, V – значение суммы int flag;     void main() { int iter; //ввод значений элементов вектора с клавиатуры и запись //вектора в файл //Lab3_TA::create_array_manual(N,vector);   //Случайное наполнение вектора и запись вектора в файл Lab3_TA::create_array(N,vector);   flag=0; iter=Lab3_TA::TaskSum(N,V,flag,vector,counter);   if (flag==1) { cout << "OK\n"; cout << "Counter Vector" << endl; for(int k = 0; k<N; k++) printf("%d%s",counter[k]," "); printf("%s\n"," "); cout << "Vector" << endl; for(int k = 0; k<N; k++) printf("%d%s",vector[k]," "); printf("%s\n"," "); cout << "Number of iteration:" << iter << endl; }//end if else cout<<"NO elements giving the sum\n"; _getch(); }//end main    
Рис. 6. Листинг основной части программы

 

Для нашего варианта заданий были получены следующие результаты рис. 7-9.

Рис.7. Результаты расчета для первого эксперимента (см. табл. 1).

 

Рис.8. Результаты расчета для второго эксперимента

 

Рис.9. Результаты расчета для третьего эксперимента

Результаты всех экспериментов представлены в таблице 1.

Таблица 1 – Результаты экспериментов для N = 11 и V = 37

N эксперимента по данным программного подсчета
1 (ручной)      
2 (ручной)      
3 (авто)      

 

Выводы.

В результате выполнения лабораторной работы:

· была исследована теоретическая оценка трудоемкости алгоритма точного решения задачи о сумме методом полного перебора;

· были получены навыки по расстановке счетчиков;

· были создана программа для исследования трудоемкости алгоритма и блок-схемы основных функций;

· было установлено, что практическая оценка трудоемкости алгоритма при существовании решения значительно меньше теоретической для худшего варианта.







Дата добавления: 2015-10-12; просмотров: 507. Нарушение авторских прав; Мы поможем в написании вашей работы!



Вычисление основной дактилоскопической формулы Вычислением основной дактоформулы обычно занимается следователь. Для этого все десять пальцев разбиваются на пять пар...

Расчетные и графические задания Равновесный объем - это объем, определяемый равенством спроса и предложения...

Кардиналистский и ординалистский подходы Кардиналистский (количественный подход) к анализу полезности основан на представлении о возможности измерения различных благ в условных единицах полезности...

Обзор компонентов Multisim Компоненты – это основа любой схемы, это все элементы, из которых она состоит. Multisim оперирует с двумя категориями...

Различия в философии античности, средневековья и Возрождения ♦Венцом античной философии было: Единое Благо, Мировой Ум, Мировая Душа, Космос...

Характерные черты немецкой классической философии 1. Особое понимание роли философии в истории человечества, в развитии мировой культуры. Классические немецкие философы полагали, что философия призвана быть критической совестью культуры, «душой» культуры. 2. Исследовались не только человеческая...

Обзор компонентов Multisim Компоненты – это основа любой схемы, это все элементы, из которых она состоит...

Искусство подбора персонала. Как оценить человека за час Искусство подбора персонала. Как оценить человека за час...

Этапы творческого процесса в изобразительной деятельности По мнению многих авторов, возникновение творческого начала в детской художественной практике носит такой же поэтапный характер, как и процесс творчества у мастеров искусства...

Тема 5. Анализ количественного и качественного состава персонала Персонал является одним из важнейших факторов в организации. Его состояние и эффективное использование прямо влияет на конечные результаты хозяйственной деятельности организации.

Studopedia.info - Студопедия - 2014-2024 год . (0.011 сек.) русская версия | украинская версия