МІНІСТЕРСТВО ОСВІТИ І НАУКИ, МОЛОДІ ТА СПОРТУ УКРАЇНИ
Національний університет «Львівська політехніка»
ІЕПТ ім. В’ячеслава Чорновола
Кафедра загальної екології та
екоінформаційних систем
РОЗРАХУНКОВА РОБОТА
з предмету: «Алгоритми і структури даних»
Варіант 5
Львів – 2012
Тема: Обробка даних рядкового типу
Мета роботи: ознайомлення з особливостями рядкового типу даних, алгоритми їх обробки, розвиток навичок програмної реалізації обробки рядків.
Завдання: Дано натуральне число n, яке вводиться з клавіатури. Треба вивести на екран символьне представлення цього числа у вигляді послідовності цифр і пропусків, які відокремлюють групи по три цифри починаючи справа. Наприклад, n=12354376, на екрані має бути виведено 12 354 376.
Необхідно розробити алгоритм і скласти програму.
Алгоритм у вигляді блок-схеми
Код програми
# include <iostream.h>
#include <string.h>
# include <conio.h>
int main()
{char a[300];
int i=0;
cout<<"Vvedit naturalne chuslo a=";
cin.getline(a,sizeof(a));
cout<<"\n"<<"Rozdilene chuslo v grupu po 3:\n\n";
do
{cout<<a[i]<<a[i+1]<<a[i+2]<<"\t";
i=i+3; }
while(a[i+4]!='\0');
getch();
return 0;}
Результат роботи програми
/
Тема: Фундаментальні структури даних
Мета роботи: ознайомлення з фундаментальними структурами даних, алгоритмами їх обробки, розвиток навичок програмування.
Завдання: Знайти кількість «щасливих» квитків з номерами від 000000 до 999999 включно. «Щасливим» називають квиток, якщо сума трьох лівих цифр дорівнює сумі трьох правих цифр (наприклад 248707). Розробити алгоритм і скласти програму для рішення задачі.
Алгоритм у вигляді блок-схеми
Код програми
# include <iostream.h>
# include <math.h>
# include <conio.h>
int main()
{int i,j,k,l,m;
int count=0;
for(int i=0;i<10;i++)
for(int j=0;j<10;j++)
for(int k=0;k<10;k++)
for(int l=0;l<10;l++)
for(int m=0;m<10;m++)
for(int n=0;n<10;n++)
if(i+j+k==n+l+m)
{
cout<<i<<j<<k<<l<<m<<n<<" suma="<<(i+j+k)<<endl;
count++;
}
cout<<"count="<<count<<"\n";
getch();
return 0;}
Результат роботи програми
/
Тема: Динамічні структури даних. Організація даних у списки.
Мета роботи: ознайомлення з динамічними структурами даних, вивчення методів їх створення у програмах і алгоритмів їх обробки, формування навичок роботи зі списковими структурами даних.
Завдання: Написати програму для додавання нового елемента в список після елемента з вказаним порядковим номером (тобто вставка не в кінець списку).
Код програми
#include <stdio.h>
#include <alloc.h>
#include <conio.h>
struct element
{ int info;
struct element *next,*prev;
}*p1,*po,*el1,*el2,*p,*t;
int znach,n,m=1,k=1;
void main()
{ clrscr();
puts("VVEDIT ZNACHENNYA ELEMENTIV");
puts("---------------------------\n");
scanf("%d",&znach);
p1=(struct element *)malloc(sizeof(struct element));
p1->info=znach;
p1->next=NULL;
p1->prev=NULL;
el1=(struct element *)malloc(sizeof(struct element));
el1=p1;
scanf("%d",&znach);
while(znach!=0)
{el2=(struct element *)malloc(sizeof(struct element));
el2->info=znach;
el2->prev=el1;
el2->next=NULL;
el1->next=el2;
el1=el2;
po=el2;
scanf("%d",&znach);m++;}
el1=p1;
puts("\n");
puts("ELEMENTY SPYSKU");
puts("---------------------------\n");
do
{printf("%d\n",el1->info);
el1=el1->next;}
while(el1!=NULL);
puts("\n");
puts("vvedit element");
scanf("%d",&znach);
puts("na yaku pozyciyu vstavyty");
scanf("%d",&n);
puts("\n");
el1=p1;
while(n>m)
{puts("V spysku nema stilky elementiv, vvedit inshu pozyciyu");
scanf("%d",&n);}
if(n==1)
{el2=(struct element *)malloc(sizeof(struct element));
el2->info=znach;
el2->prev=NULL;
el2->next=el1;
p1=el2;}
else
if(n==m)
{el2=(struct element *)malloc(sizeof(struct element));
el2->info=znach;
el2->prev=po;
el2->next=NULL;
po->next=el2; }
else
{while(k!=m)
{if(k==n-1)
t=el1;
if(k==n)
p=el1;
el1=el1->next;
k++;}
el2=(struct element *)malloc(sizeof(struct element));
el2->info=znach;
el2->prev=t;
t->next=el2;
el2->next=p;
p->prev=el2;}
el1=p1;
puts("NOVYI SPYSOK");
puts("---------------------------\n");
do
{printf("%d\n",el1->info);
el1=el1->next;}
while(el1!=NULL);
getch();}
Результат роботи програми
Теми: Сортування масивів і аналіз алгоритмів
Мета роботи: Вивчення різних методів зовнішнього і внутрішнього сортування, дослідження і аналіз алгоритмів на прикладі алгоритмів сортування масивів.
Завдання: Скласти програму для сортування масиву методом простого вибору і методом бульбашки.
1.Сортування масиву методом простого вибору
Блок-схема
Код програми
# include <iostream.h>
# include <conio.h>
const int n=8;
void main(){
int x,j;
int a[n];
cout<<"Sortuvanna masuvu prostumu vstavkamu\n\n";
cout<<"Vvedit elementu masuvu:\n\n";
for(int i=1; i<=n; i++)
cin>>a[i];
for(int i=2; i<=n;i++)
{x=a[i];
a[0]=x;
j=i-1;
while(x<a[j])
{a[j+1]=a[j];
j=j-1; }
a[j+1]=x; }
cout<<"\nPosortovanuy masuv:\n\n";
for(int i=1; i<=n; i++)
cout<<a[i]<<" ";
getch(); }
Результат роботи програми
/
2. Cортування масиву методом бульбашки
Блок-схема
Код програми
#include <iostream.h>
#include <stdlib.h>
#include <conio.h>
const int SIZE = 25;
int array[SIZE];
// zapovnenna masuvu vupadkovumu chuslamu
void GenerationArray()
{
// pruvazka po chasu dla generatsii chusel bez povtoren
srand(time(0));
for (int i=0; i<SIZE; i++)
{
// zapovnenna masuvu chuslamu <100
array[i] = rand()%100;
}
}
// Vvuvedenna masuvu na ekran
void ShowArray()
{
for (int i=0; i<SIZE; i++)
{
cout << array[i] << " ";
}
cout << endl;
}
int main()
{ cout<<"Masuv zgenerovanuh vupadkovuh chusel:\n\n";
int temp;
GenerationArray();
ShowArray();
// sortuvanna bulbashkou
for (int x=SIZE; x>0; x--)
{
for (int i=0; i<SIZE-1; i++)
{
// aksho chuslo bilshe za poperedne
if (array[i] > array[i+1])
{
// minnaemo ih mistsamu
temp = array[i];
array[i] = array[i+1];
array[i+1] = temp;
}
}
}
cout<<"\nPosortovanuy masuv\n\n";
ShowArray();
getch();
return 0;
}
Результат роботи програми
/
Тема: Рекурсивні структури даних. Графи
Мета роботи: ознайомлення з різними рекурсивними структурами даних (дерева, графи), вивчення і дослідження рекурсивних структур на прикладі графів.
Завдання: Написати програму, яка шукає у графі вершину, з котрої виходить найбільша кількість ребер.
Блок схема
Код програми
// Graf.cpp:
//
#include "stdafx.h"
#include<iostream>
#include<conio.h>
#include<time.h>
#include<windows.h>
using namespace std;
int _tmain(int argc, _TCHAR* argv[])
{
int matr[8][8] = {
{0,1,1,1,0,0,0,0},
{1,0,1,0,0,0,0,0},
{1,1,0,0,0,0,1,0},
{1,0,0,0,1,0,0,0},
{0,0,0,1,0,1,0,0},
{0,0,0,0,1,0,1,0},
{1,0,1,0,1,1,0,1},
{0,0,0,0,0,0,1,0}
};
cout<<"Matrix inside\n";
int s=0;
int i = 0, j = 0;
while(i < 8)
{
for(j = 0; j < 8; j++)
{
cout<<matr[i][j]<<" ";
if(matr[i][j] == 1)
s = s + matr[i][j];
}
cout<<", stepin' vershunu "<<i+1<<" = "<<s<<"\n";
s = 0;
i++;
}
int t=1;
int max=matr[0][0];
for(i = 0; i < 8; i++)
{for(j = 0; j < 8; j++)
{ if(matr[i][j]>max)
max=matr[i][j];
t=i;
}
}
cout<<"\nVershuna z yakoi vuhodut naybilsha kilkist reber # "<<t;
_getch();
return 0;
}
Результат роботи програми
/