Форматы представления данных
Программа использует следующие переменные:
Для задания минимального и максимального пределов числа экспериментов используются следующие константы
Для задания координат точки на плоскости используется структура Point2D, в которой задаются x и y координаты точки. Структура программы В силу своей простоты программа помещена в одном исполняемом модуле. Программа разделена несколько функций:
Результаты работы программы В результате вычислений программа выводит примерное значение числа «пи». Точность вычислений определяется числом проведённых экспериментов и качеством используемого генератора случайных чисел. Исходный текст программы [ Начало программы ---] // Lab1.cpp // Лабораторная работа №1. // Использование языка С++ для математических расчётов // Расчёт числа "пи" методом Монте-Карло // Студент группы NNN, Ф.И.О. 2005 год
#include "stdafx.h" #include <math.h> #include <time.h> #include <iostream>
#include <windows.h> #include <string>
using namespace std;
// ConvertCodepage // Служебная функция, необходимая для вывода текста // на русском языке в консольном приложении. // Входные данные: // Указатель на преобразуемую ANSI-строку // Выходные данные: // Строка в OEM-кодировке string ConvertCodepage(const char *text){ char *buffer=new char[strlen(text)+1]; if (NULL == buffer) return ""; AnsiToOem(text,buffer); string result(buffer); delete[] buffer; return result; }
// Структура, описывающая точку на плоскости struct Point2D { float x,y; };
// Генерация случайной точки с координатами x и y // в интервале от нуля до единицы Point2D GeneratePoint() { Point2D pt; pt.x = rand()/float(RAND_MAX); pt.y = rand()/float(RAND_MAX); return pt; }
// Проверка нахождения точки внутри окружности bool IsInsideCircle(const Point2D& pt) { const float circle_radius=0.5f; const Point2D circle={0.5f,0.5f}; float dist_from_center= sqrt(pow(circle.x-pt.x,2)+pow(circle.y-pt.y,2)); return dist_from_center < circle_radius; }
// Обработка ввода пользователя int ProcessInput() { const int LowerLimit = 100; const int UpperLimit = 10000000; bool InputSuccess=false; int tries;
while (!InputSuccess) { cout << ConvertCodepage("Введите число экспериментов:"); cin >> tries;
if (tries <= 0) { cout << ConvertCodepage( "Число экспериментов должно быть положительным.") << endl; continue; } InputSuccess=true; }
if (tries < 100) { cout << ConvertCodepage( "Результат может быть неточным.") << endl; } if (tries > UpperLimit) { cout << ConvertCodepage( "Вычисления могут быть длительными.") << endl; }
return tries; }
// Основной модуль int _tmain(int argc, _TCHAR* argv[]) { int in_circle=0; int tries; tries = ProcessInput();
// Инициализация генератора ПСЧ srand((unsigned)time(NULL));
// Генерация и проверка точек for (int i=1; i <= tries; ++i) { Point2D pt = GeneratePoint(); if (IsInsideCircle(pt)) ++in_circle; } // Вычисление числа "пи" cout << ConvertCodepage("Число пи = "); cout << 4*(in_circle/float(tries)) << endl;
return 0; } [--- Конец программы.] 3. Лабораторная работа №2. Лабораторная работа предназначена для приобретения практического опыта в работе с наборами объектов в языке программирования С++.
Призвана продемонстрировать: · Принципы индексного доступа к элементам массивов; · Основы файлового ввода-вывода в языке С++. · Принципы разработки модульных тестов. Варианты заданий Во всех работах кроме консольного ввода-вывода (экран, клавиатура) необходимо предоставить возможность вводить исходные данные из файла и сохранять результат работы программе в файле. На оценку «удовлетворительно»
На оценку «хорошо»
На оценку «отлично»
Файловый ввод-вывод
Модульные тесты
4. Лабораторная работа №3. Лабораторная работа предназначена для приобретения практического опыта в работе с текстовыми данными и разработке функциональных интерфейсов. Призвана продемонстрировать: · Принципы работы со строками в стиле языка С. · Принципы функциональной декомпозиции. · Принципы разделения исходного текста на отдельные файлы. Варианты заданий
Воспользуйтесь поиском по сайту: ©2015 - 2024 megalektsii.ru Все авторские права принадлежат авторам лекционных материалов. Обратная связь с нами...
|