Главная | Обратная связь | Поможем написать вашу работу!
МегаЛекции

Форматы представления данных




Программа использует следующие переменные:

Имя Тип Описание
tries int Число попыток в эксперименте
in_circle int Число точек, попавших в окружность

 

Для задания минимального и максимального пределов числа экспериментов используются следующие константы

 

Имя Тип Значение Описание
LowerLimit const int   Минимальное число экспериментов, обеспечивающих достоверность.
UpperLimit const int   Число экспериментов, при превышении которого вычисления могут быть долгими.

 

Для задания координат точки на плоскости используется структура Point2D, в которой задаются x и y координаты точки.

Структура программы

В силу своей простоты программа помещена в одном исполняемом модуле. Программа разделена несколько функций:

 

Имя Описание
ConvertCodepage Преобразование текста из кодировки ANSI в кодировку OEM. Используется для вывода текста, содержащего символы кириллицы в консольное окно. Служебная функция. В предмет рассмотрения данной работы не входит.
GeneratePoint Создание точки в заданных координатах.
IsInsideCircle Проверка на нахождение точки внутри окружности.
ProcessInput Обработка ввода пользователя.

Результаты работы программы

В результате вычислений программа выводит примерное значение числа «пи». Точность вычислений определяется числом проведённых экспериментов и качеством используемого генератора случайных чисел.

Исходный текст программы

[ Начало программы ---]

// 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.
Использование массивов.

Лабораторная работа предназначена для приобретения практического опыта в работе с наборами объектов в языке программирования С++.

Призвана продемонстрировать:

· Принципы индексного доступа к элементам массивов;

· Основы файлового ввода-вывода в языке С++.

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

Варианты заданий

Во всех работах кроме консольного ввода-вывода (экран, клавиатура) необходимо предоставить возможность вводить исходные данные из файла и сохранять результат работы программе в файле.

На оценку «удовлетворительно»

  Напишите программу, находящую медиану массива. То есть индекс ячейки массива, сумма элементов слева от которой минимально отличается от суммы элементов справа.
  Напишите программу, выполняющую сортировку методом прямого обмена («пузырьковую сортировку»).
  В трехмерном пространстве заданы точки (тройками значений x,y,z) и сфера (центр и радиус). Напишите программу, выводящую точки (их координаты), которые попадают в заданную пользователем сферу.
  Напишите программу сортировки элементов массива (любым методом) так, чтобы все чётные элементы оказались в левой части массива, а все нечётные – в правой.

На оценку «хорошо»

  Напишите программу, находящую в массиве вещественных чисел последовательность, имеющую максимальную сумму. Программа должна выводить начальный и конечный элемент.
  Напишите программу, выполняющую сортировку методом прямого обмена («шейкерную сортировку»).
  Напишите программу сортировки элементов массива (любым методом) так, чтобы отрицательные элементы чередовались с положительными.
  Напишите программу двоичного поиска заданного значения в упорядоченном массиве. Программа должна возвращать индекс искомого элемента в массиве или каким-либо образом информировать об отсутствии искомого элемента в массиве.

На оценку «отлично»

  В трехмерном пространстве задано множество сфер (центр и радиус). Пользователь задаёт луч (начало и направление). Определить, с какими сферами пересекается введённый пользователем луч. Предоставить возможность считывать данные о сферах с диска, редактировать (добавлять, удалять) данные о сферах и записывать обновлённую информацию на диск.

Файловый ввод-вывод

  Для реализации ввода-вывода (экранного и файлового) необходимо использовать потоковые библиотеки С++.
  Консольный ввод-вывод должен осуществляться с помощью объектов cin и cout.
  Файловый ввод-вывод должен осуществляться с использованием объектов ifstream, ofstream.
  Консультации по использованию потоков ввода-вывода могут быть получены у преподавателя.

Модульные тесты

  Каждая программа должна сопровождаться набором модульных тестов, позволяющих проверить её работоспособность на примерах с заранее известным результатом.
  Модульные тесты должны запускаться автоматически или в случае выбора пользователем соответствующего пункта меню программы.
  Модульные тесты должны содержать минимум пять тестовых наборов данных для автоматической проверки.

 

4. Лабораторная работа №3.
Работа с символьными строками.

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

Призвана продемонстрировать:

· Принципы работы со строками в стиле языка С.

· Принципы функциональной декомпозиции.

· Принципы разделения исходного текста на отдельные файлы.

Варианты заданий

Поделиться:





Воспользуйтесь поиском по сайту:



©2015 - 2024 megalektsii.ru Все авторские права принадлежат авторам лекционных материалов. Обратная связь с нами...