Программирование на C++
Использование указателей и ссылок в программировании на C++. Определение, объявление и перегрузка функций. Работа с многомерными массивами. Рекурсивное описание алгоритмов обработки и их программная реализация. Структуры, объединения и поля битов.
Рубрика | Программирование, компьютеры и кибернетика |
Вид | отчет по практике |
Язык | русский |
Дата добавления | 14.03.2014 |
Размер файла | 291,2 K |
Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже
Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.
Сортировка массивов
Сортировка - это процесс упорядочения некоторой последовательности нумерованных объектов в соответствии с заданным признаком. Цель сортировки - облегчить последующий поиск элементов в отсортированной последовательности.
При решении задачи сортировки обычно выдвигается требование минимального использования дополнительной памяти, т.е. в частности, недопустимость применения дополнительных массивов. Для оценки быстродействия алгоритмов различных методов сортировки, как правило, используют два показателя: количество присваиваний и количество сравнений.
Все методы сортировки можно разделить на две большие группы: прямые методы сортировки и улучшенные методы сортировки. Прямые методы сортировки по принципу, лежащему в основе метода, подразделяются на три подгруппы:
- сортировка обменом («пузырьковая» сортировка);
- сортировка вставкой (включением);
- сортировка выбором (выделением).
Прямые методы на практике используются довольно редко, так как имеют относительно низкое быстродействие. Однако они хорошо показывают суть основанных на них улучшенных методов. В то же время, в некоторых случаях (как правило, при небольшой длине массива и/или особом исходном расположении элементов массива) некоторые из прямых методов могут даже превзойти улучшенные методы). Улучшенные методы сортировки, основываясь на тех же принципах, что и прямые, используют некоторые оригинальные идеи для ускорения процесса сортировки. С точки зрения программиста наибольший интерес представляют сортировки массивов, строк, файлов.
Методы вставки и выбора оказываются в среднем приблизительно эквивалентными и в несколько раз (в зависимости от длины массива) лучше, чем метод обмена («пузырька).
Исследования алгоритмов прямых методов сортировки показали, что как по числу сравнений, так и по числу присваиваний они имеют квадратичную зависимость от длины массива n. Исключение составляет метод выбора, который имеет число присваиваний порядка n*ln(n). Это свойство алгоритма выбора полезно использовать в задачах сортировки в сложных структурах данных, когда на одно сравнение выполняется большое число присваиваний. В таких задачах метод выбора успешно конкурирует с самыми быстрыми улучшенными методами сортировки.
8.2 Практическая часть
Задание 8.2.1
Текст программы:
#include "stdafx.h"
#include <iostream>
#include <iomanip>
#include <conio.h>
using namespace std;
int _tmain(int argc, _TCHAR* argv[])
{int p,j,i;
const int N=6;
static int arr [N][N] = { { 1, 2, 3, 4, 5, 6},
{20, 21, 22, 23, 24, 7},
{19, 32, 33, 34, 25, 8},
{18, 31, 36, 35, 26, 9},
{17, 30, 29, 28, 27, 10},
{16, 15, 14, 13, 12, 11} };
for (p=0; p<N/2; p++)
{for (j=p; j<=N-p-1; j++)
cout << setw(4) << arr[p][j];
for (i=p+1; i<N-p; i++)
<< setw(4) << arr[i][N-p-1];
for (j=N-p-2; j>=p; j--)
cout << setw(4) << arr[N-p-1][j];
for (i=N-p-2; i>=p+1; i--)
cout << setw(4) << arr[i][p];}
_getch();
return 0;}
Задание 8.2.2
Текст программы:
#include "stdafx.h"
#include <iostream>
#include <iomanip>
#include <conio.h>
using namespace std;
int _tmain(int argc, _TCHAR* argv[])
{void bsort (int*, int);
const int N = 10;
static int arr [N] = {37, 84, 62, 91, 11, 65, 57, 28, 19, 49};
bsort (arr, N);
for (int j=0; j<N; j++)
cout << arr[j] <<" ";
cout << endl;
return 0;}
//------------------------------------
void bsort (int* x, int n)
{int i,j;
for (i=1; i<n; i++)
{for (j=0; j<n;j++)
if (x[j]>x[j+1])
{int r=x[j];
x[j]=x[j+1];
x[j+1]=r;}
for (j=0;j<n; j++)
cout << x[j] << " ";
cout << endl;}}
Задание 8.2.3
Текст программы:
#include "stdafx.h"
#include <iostream>
#include <iomanip>
#include <conio.h>
using namespace std;
int _tmain(int argc, _TCHAR* argv[])
{void bsort (int*, int);
const int N=10;
static int arr [N] = {37, 84, 62, 91, 11, 65, 57, 28, 19, 49};
bsort (arr, N);
for (int j=0; j<N; j++)
cout << arr [j] << " ";
cout << endl;
return 0;}
//--------------------------------------
void bsort (int* x, int n)
{int flag = 1, k = n;
while (flag)
{k--;
flag = 0;
for (int j=0; j<k; j++)
if (x[j]>x[j+1])
{int r = x[j];
x[j]=x[j+1];
x[j+1]=r;
flag=1;}}}
Задание 8.2.4
Текст программы:
#include "stdafx.h"
#include <iostream>
#include <iomanip>
#include <conio.h>
#include <stdlib.h>
using namespace std;
int _tmain(int argc, _TCHAR* argv[])
{const int n = 10;
int x[n], D[n], i, j;
cout << "x[i]" << endl;
for (i=0; i<n; i++) x[i]=rand();
for (i=0; i<n; i++) cout << x[i] << " ";
cout << endl;
for (i=0; i<n; i++)
D[i]=x[i]%10;
cout << "D[i]" << endl;
for (i=0; i<n; i++) cout <<D[i] << " ";
cout << endl;
int flag = 1, k=n;
while (flag)
{k--;
flag=0;
for (j=0; j<k; j++)
if ((D[j]>D[j+1]) || (D[j] == D[j+1] && x[j]>x[j+1]))
{int r=x[j];
int r1=D[j];
x[j]=x[j+1]; D[j]=D[j+1];
x[j+1]=r; D[j+1] = r1;
flag=1;}}
cout << endl;
for (i=0; i<n; i++) cout << x[i] <<" ";
cout << endl;
for (i=0; i<n; i++) cout << D[i] <<" ";
cout << endl;
return 0;}
Задание 8.2.5
Текст программы:
#include "stdafx.h"
#include <iostream>
#include <iomanip>
#include <conio.h>
#include <stdlib.h>
using namespace std;
int main()
{const int n =10;
int x[n];
int i, j, temp;
for (i=0; i <n; i++)
x[i] = rand();
for (i=0; i <n; i++)
cout << setw(6) << x[i];
cout << endl <<endl;
for (i=1; i<n; i++)
{temp = x[i];
j = i-1;
while ((temp<x[j]) && (j>=0))
{ x[j+1] = x[j];
j--;}
x[j+1] = temp;}
for (i=0; i<n; i++) cout << setw(6) << x[i];
cout << endl;
return 0;}
Задание 8.2.6
Текст программы:
#include "stdafx.h"
#include <iostream>
#include <iomanip>
#include <conio.h>
#include <stdlib.h>
using namespace std;
int _tmain(int argc, _TCHAR* argv[])
{const int n = 10;
int x[n];
int i, j;
for (i=0; i<n; i++)
x[i] = rand();
for (i=0; i<n; i++)
cout << setw(6) << x[i];
cout <<endl<<endl;
for (i=0; i<n-1; i++)
{ int min = x[i];
int i_min = 1;
for (j=i+1; j<n; j++)
if (x[j] < min)
{ min = x[j];
i_min = j;}
x[i_min] = x[i];
x[i] = min;}
for (i=0; i<n; i++)
cout <<setw(6) << x[i];
cout << endl;
return 0;}
Задание 8.2.7
Текст программы:
Рисунок 8.109 - Скриншот работы программы 8.2.7
Задание 8.2.8
Текст программы:
#include "stdafx.h"
#include <iostream>
#include <iomanip>
#include <conio.h>
#include <stdlib.h>
using namespace std;
const int n=3;
const int m=5;
int _tmain(int argc, _TCHAR* argv[])
{int a [n][m], i, j, x;
for (i=0; i<n; i++)
{for (j=0; j<n; j++)
{a[i][j] = rand();
cout << setw(10)<< a[i][j]<<" ";}
cout << endl;}
cout << endl << endl;
for (j=0; j<m/2; j++)
for (i=0; i<n; i++)
{x=a[i][j];
a[i][j] = a [i][m-(j+1)];
a[i][m-(j+1)]=x;}
for (i=0; i<n; i++)
{for (j=0; j<n; j++)
cout << setw(10) << a[i][j] << " ";
cout << endl; }
_getch();
return 0;}
Задание 8.2.9
Текст программы:
#include "stdafx.h"
#include <iostream>
#include <conio.h>
#include <iomanip>
using namespace std;
const int NROW = 100;
const int NCOL = 40;
void vvod_ar (int arra[NROW][NCOL], int m, int n);
void vyvod_ar (int arra[NROW][NCOL], int m, int n);
void poisk_min (int arra[NROW][NCOL], int m, int n, int &imin, int &jmin);
void del_min (int arra[NROW][NCOL], int m, int n, int imin, int jmin);
int main()
{ int m=10;
int n=9;
int imin, jmin;
int arra [NROW][NCOL] = { {1}, {2}, {3}, {4}, {5} };
int arra1 [][NCOL] = { {1}, {2}, {3}, {4}, {5} };
vvod_ar(arra, m, n);
vyvod_ar(arra, m, n);
poisk_min(arra, m, n, imin, jmin);
cout << "imin = " << imin+1 << endl;
cout << "jmin = " << jmin+1 << endl;
del_min (arra, m, n, imin, jmin);
vyvod_ar(arra, m-1, n-1);
_getch();
return 0;}
void vyvod_ar(int arra[NROW][NCOL], int m, int n)
{for (int i=0; i<m; i++)
{for (int j=0; j<n; j++)
cout << setw(3) << arra[i][j];
cout << endl;}
cout << endl;}
void vvod_ar(int arra [NROW][NCOL], int m, int n)
{for (int i=0; i<m; i++)
for (int j=0; j<n; j++)
arra[i][j] = 1 + rand()%10;}
void poisk_min(int a[NROW][NCOL], int m, int n, int &imin, int &jmin)
{imin = jmin = 0;
int min = a[0][0];
for (int i=0; i<n; i++)
for (int j=0; j<n; j++)
if (a[i][j] <= min) {
min = a[i][j];
imin=i;
jmin=j;}}
void del_min(int a[NROW][NCOL], int m, int n, int imin, int jmin)
{int ii, jj;
for (int i=0; i<m-1; i++)
for (int j=0; j<n-1; j++)
{ if (i >=imin) ii=i+i; else ii=i;
if (j >=jmin) jj=j+j; else jj=j;
a[i][j] = a[ii][jj];}}
Задание 8.2.10
Текст программы:
#include "stdafx.h"
#include <iostream>
#include <iomanip>
#include <conio.h>
#include <stdlib.h>
using namespace std;
const int N = 100;
void vvod_ar(int arra [N][N], int n);
void vyvod_ar(int arra [N][N], int n);
void sun_diag(int arra [N][N], int n);
int _tmain(int argc, _TCHAR* argv[])
{int n=5;
int arra [N][N];
vvod_ar (arra, n);
vyvod_ar (arra, n);
sun_diag (arra, n);
_getch();
return 0;}
void vyvod_ar (int arra[N][N], int n)
{for (int i=0; i<n; i++)
{ for (int j=0; j<n; j++)
cout << setw(3) << arra [i][j];
cout << endl;}
cout << endl;}
void vvod_ar (int arra [N][N], int n)
{for (int i=0; i<n; i++)
for (int j=0; j<n; j++)
arra [i][j] = rand()%2;}
void sun_diag (int a[N][N], int n)
{ int s=0, s1, s2;
for (int i=0; i<n; i++)
s+=a[i][i];
cout << "glav: " << s << endl << endl;
for (int i=0; i<n-1; i++)
{ s1=0; s2=0;
for (int j=0; j<n-i-1; j++)
{ s1+=a[j][i+j+1];
s2+=a[i+j+1][j];}
cout << "verx: " << s1 << endl;
cout << "nijn: " << s2 << endl;}}
9 ИСПОЛЬЗОВАНИЕ ГРАФИЧЕСКИХ СРЕДСТВ
9.1 Практическая часть
Задание 9.1.1
Текст программы:
void CMFCApplication1Dlg::OnPaint()
{CPaintDC dc(this);
CRect rect;
GetClientRect(&rect);
for (int line = 0; line < 50; line++){
dc.MoveTo(rand() % rect.right, rand() % rect.bottom);
dc.LineTo(rand() % rect.right, rand() % rect.bottom);}}
Задание 9.1.2
Текст программы:
void CMFCApplication9Dlg::OnPaint()
{CPaintDC dc(this);//создаем контекст устройства
int maxX,maxY,stepX,stepY;
CRect rect;
GetClientRect(&rect);//определяем размеры клиентской части окна
maxX=rect.right;
maxY=rect.bottom;
stepX=maxX/8;
stepY=maxY/8;
CPen pen1,pen2;//создаем два пера
pen1.CreatePen(PS_SOLID,2,RGB(0,255,0));
pen2.CreatePen(PS_SOLID,1,RGB(255,0,0));
CBrush brush1,brush2;//создаем две кисти
brush1.CreateSolidBrush(RGB(100,100,100));
brush2.CreateSolidBrush(RGB(255,255,255));
dc.SelectObject(&pen2); //выбрали перо
dc.SelectObject(&brush1); //выбрали кисть
dc.Ellipse(0,0,maxX,maxY); //нарисовали фигуру
dc.SelectObject(&brush2); //выбрали кисть
dc.Ellipse(stepX*1,stepY*1,maxX-stepX*1,maxY-stepY*1); //нарисовали фигуру
dc.SelectObject(&brush1); //выбрали кисть
dc.Ellipse(stepX*2,stepY*2,maxX-stepX*2,maxY-stepY*2); //нарисовали фигуру
dc.SelectObject(&brush2); //выбрали кисть
dc.Ellipse(stepX*3,stepY*3,maxX-stepX*3,maxY-stepY*3); //нарисовали фигуру
dc.SelectObject(&pen1); //выбрали перо и рисуем две линии
dc.MoveTo(0,maxY / 2); dc.LineTo(maxX,maxY /2);
dc.MoveTo(maxX / 2,0); dc.LineTo(maxX /2,maxY);}
Размещено на Allbest.ru
...Подобные документы
Разработка блок-схемы и программы обработки одномерного массива с доступом к элементам с помощью индексов и с помощью указателей. Словесное описание алгоритма и пользовательского интерфейса, листинг программы обработки матрицы и результат её выполнения.
курсовая работа [391,1 K], добавлен 30.09.2013Запись кодов команд программы и констант в FlashROM, кодов исходных данных в EEPROM, требуемых значений установочных битов (Fuse Bits) и битов защиты (Lock Bits). Запись и чтение кодов при программировании, способы программирования в микроконтроллерах.
контрольная работа [24,2 K], добавлен 22.08.2010Изучение функций и возможностей среды разработки языка программирования Pascal. Рассмотрение работы с одномерными и двумерными массивами, со строками и числами. Математическая формулировка задач. Разработка алгоритмов, описание структуры программ.
курсовая работа [879,8 K], добавлен 11.02.2016Изучение применяемых в программировании и информатике структур данных, их спецификации и реализации, алгоритмов обработки данных и анализ этих алгоритмов. Программа определения среднего значения для увеличивающегося количества чисел заданного типа.
контрольная работа [16,0 K], добавлен 19.03.2015Решение инженерных задач при работе с визуальными данными. Базовые структуры данных. Базовые операции над многомерными числовыми массивами. Калибровка камер, элементы восстановления пространственной структуры. Анализ движения, слежение за объектами.
курсовая работа [4,5 M], добавлен 21.06.2011Вычисление выражений, использование стандартных функций; работа с графикой. Порядок действий при вычислении, способы ввода данных с клавиатуры. Построение таблиц функций. Организация циклов в программе, итерационные процессы. Работа с массивами чисел.
контрольная работа [614,7 K], добавлен 16.09.2012Основные особенности эволюционных алгоритмов. Описание алгоритмов селекции, мутации, скрещивания, применяемых для реализации генетических алгоритмов. Вычисление функции приспособленности. Программная реализация. Тестирование и руководство пользователя.
курсовая работа [1,3 M], добавлен 11.03.2014Изучение определения, описания и вызова функций, указателей и ссылок на них. Написание функции умножения произвольного столбца двумерного массива на const. Умножение 2 столбцов массива на константы. Составление блок-схемы алгоритма и текста программы.
лабораторная работа [182,3 K], добавлен 09.01.2012Описание особенностей программирования циклических алгоритмов на С/С++. Использование операторов цикла для организации повтора в программе определенных действий. Создание и реализация программы приближенного вычисления интеграла методом трапеций.
лабораторная работа [86,3 K], добавлен 25.03.2019Целые числа в позиционных системах счисления. Недостатки двоичной системы. Разработка алгоритмов, структур данных. Программная реализация алгоритмов перевода в различные системы счисления на языке программирования С. Тестирование программного обеспечения.
курсовая работа [593,3 K], добавлен 03.01.2015Составление алгоритмов и написание программ циклической структуры с использованием векторов, указателей и векторов указателей на вектор на языке C++. Статическое и динамическое распределение памяти. Функция ввода и обработки элементов вектора или матрицы.
контрольная работа [210,5 K], добавлен 25.03.2015Введение в API-программирование. Транслирование клавиатурных сообщений в ASCII-коды. Текст программы на 32-битном ассемблере с применением API-функций. Функция для создания диалогового окна. Определение открываемого диска, каталога и имени файла.
курсовая работа [40,6 K], добавлен 18.05.2014Специфика понятия "плагиат" в программировании. Схема работы модулей инструментальной системы поиска плагиата. Основы поиска в исходных кодах программ, в произвольных текстах. Обзор инструментальных средств. Программная реализация модуля PlagiatSearch.
магистерская работа [4,9 M], добавлен 27.06.2014Разработка иерархии классов, содержащей не менее трех уровней. Определение базовых и производных классов. Анализ технического задания. Проектирование структуры программы и базовых алгоритмов. Программная реализация разработанной структуры и алгоритмов.
курсовая работа [34,9 K], добавлен 11.01.2011Общие сведения о языке С++. Операции и выражения, стандартные функции и структура программы. Использование функций при программировании на С++. Основные алгоритмы обработки массивов. Статические и динамические матрицы. Организация ввода-вывода в C++.
учебное пособие [6,7 M], добавлен 28.03.2014Анализ затрат и прибыли. Создание программного проекта для решения задачи о прибыли и убытках на языке программирования C#. Использование функций и переменных, компиляция программы. Алгоритмы и структуры данных. Тестирование программного обеспечения.
курсовая работа [1,2 M], добавлен 03.01.2015Понятие процедур и функций, их параметры, отличия и особенности спецификаций и тела. Вызов процедур и функций. Использование хранимых функций в SQL-операторах, уровни строгости для их вызова. Синтаксис удаления процедуры. Перегрузка модульных подпрограмм.
презентация [259,9 K], добавлен 14.02.2014Различные способы обработки информации и программирование в среде Pascal. История создания языка. Блок схема с использованием заголовка функций задания. Описание подпрограмм. Сущность структурного программирования в аспекте написания алгоритмов программ.
курсовая работа [331,9 K], добавлен 18.01.2016Основные типы циклов программирования. Методы применения специальных функций break, continue и цикла while. Обработка массивов информации. Условия применения циклических алгоритмов на языке программирования С++. Инициализация одномерного массива.
курсовая работа [1,7 M], добавлен 06.01.2014Приобретение навыков структурных блок-схем и листингов программ на языке "Ассемблер" для простых микропроцессорных систем управления процессами. Типовые структуры блок-схем алгоритмов обработки данных. Программная реализация типовых функций управления.
методичка [1007,8 K], добавлен 01.10.2010