Отчет 3 (1079384)
Текст из файла
Отчет по Лабораторной работе №3
«Стек»
Работу выполнила Чёрненькая И.С. ____________
ИУ-5-21
Преподаватель Козлов А.Д. ____________
22 мая 2009 г.
Условие задачи
Для заданного целого n>1 наименьшее целое d>1, на которое делится n – простой множитель. Разложение n на простые множители можно произвести поиском d с дальнейшей заменой n на частное от деления n на d и повторяя этот процесс, пока n не станет равным 1. Написать программу разложения n на простые множители этим способом с печатью простых множителей сначала по убыванию, а потом – по возрастанию.
Описание алгоритма
В данной программе реализована работа с двумя видами стеков. Один – работа со стандартным классом <stack>, с использованием встроенных в него функций, а второй, наиболее интересный с практической точки зрения – работа с самописным классом.
В написанном классе реализованы основные функции стека, именно запись в стек и чтение из него.
Функция push является полным аналогом push стандартного класса, а pop объединяет pop и top стандратного стека.
Класс стека оперирует классами экземплярами класса элементов. Класс элементов myElem содержит два поля – поле-указатель на следующий элемент и место для хранимого int значения. Реализовано два типа конструкторов: для создания нулевых и ненулевых элементов.
Работа функций pop и push прозрачна, для push состоит в создании экземпляра myElem, записи адреса текущего элемента в предыдущий (либо NULL для первого элемента стека). Для pop – возврат значения последнего элемента, его удаление и обнуление указателя на следующий элемент у предпоследнего.
Для реализации алгоритма разложения на множители используется функция nod (наименьший общий делитель).
Алгоритм программы:
Текст программы:
main.cpp
#include <iostream>
#include <stack>
#include "stack.h"
using namespace std;
int nod(int &n){
int d=2;
while(n%d!=0){
d++;
}
n /= d;
return d;
}
void main(){
stack<int> adiv;
stack<int> ddiv;
int n;
cout << "Введите число для разлодения: ";
cin >> n;
while(n!=1){
adiv.push(nod(n));
}
cout << "Количество множителей: " << adiv.size() << endl;
cout << "* ";
while (!adiv.empty()) {
cout << adiv.top() << " * ";
ddiv.push(adiv.top());
adiv.pop();
}
cout <<endl << "* ";
while(!ddiv.empty()){
cout << ddiv.top() << " * ";
ddiv.pop();
}
myStack dzstack;
myStack dzstack2;
n = 0;
cout << endl <<"Попробуйте еще раз: ";
cin >> n;
while(n!=1)
{
dzstack.push(nod(n));
}
int d=0;
cout << "* ";
while( dzstack.pop(d))
{
dzstack2.push(d);
cout << d <<" * ";
}
cout << endl << "* ";
while( dzstack2.pop(d))
{
cout << d <<" * ";
}
cout << endl;
}
stack.h
class myElem{
public:
int Info;
myElem * Next;
myElem():Next( NULL ), Info (0){}
myElem(int info):Next( NULL ), Info (info){}
};
class myStack
{
private:
myElem* Current;
public:
myStack(){
Current = NULL;
}
~myStack();
void push(int info);
bool pop(int&info);
};
myStack::~myStack(){
while(Current){
myElem* temp = Current->Next;
delete Current;
Current = temp;
}
}
void myStack::push(int info){
myElem* temp = new myElem(info);
temp->Next = Current;
Current = temp;
}
bool myStack::pop(int& info ){
if ( Current == NULL)
return false;
info = Current->Info;
myElem* temp = Current->Next;
delete Current;
Current = temp;
return true;
}
Проверка и вывод результата:
Введите число для разложения: 3960
Количество разложений: 7
* 11 * 5 * 3 * 3 * 2 * 2 * 2 *
* 2 * 2 * 2 * 3 * 3 * 5 * 11 *
Попробуйте еще раз: 3960
* 11 * 5 * 3 * 3 * 2 * 2 * 2 *
* 2 * 2 * 2 * 3 * 3 * 5 * 11 *
Программа работает исправно.
Характеристики
Тип файла документ
Документы такого типа открываются такими программами, как Microsoft Office Word на компьютерах Windows, Apple Pages на компьютерах Mac, Open Office - бесплатная альтернатива на различных платформах, в том числе Linux. Наиболее простым и современным решением будут Google документы, так как открываются онлайн без скачивания прямо в браузере на любой платформе. Существуют российские качественные аналоги, например от Яндекса.
Будьте внимательны на мобильных устройствах, так как там используются упрощённый функционал даже в официальном приложении от Microsoft, поэтому для просмотра скачивайте PDF-версию. А если нужно редактировать файл, то используйте оригинальный файл.
Файлы такого типа обычно разбиты на страницы, а текст может быть форматированным (жирный, курсив, выбор шрифта, таблицы и т.п.), а также в него можно добавлять изображения. Формат идеально подходит для рефератов, докладов и РПЗ курсовых проектов, которые необходимо распечатать. Кстати перед печатью также сохраняйте файл в PDF, так как принтер может начудить со шрифтами.















