Создание многофайлового проекта




Создание структуры проекта

 

Создание по пунктам:

1. Создать пустой проект

2. Создать главную функцию main в папке «Файлы исходные кода» с расширением main.cpp

3. Создать и подключить в функции main заголовочные файлы: recursion.h,struct.h, file.h, sort.h, stack_tqueue.h, tree.h, graf.h

4. Создать файлы с расширением cpp для каждой из тем в папке «Файлы исходные кода»

5. Описать прототипы функций заданий в заголовочных файлах. Каждая тема в своём заголовочном файле

6. Создать файлы в папке «Файлы ресурсов»

 

Описание функции main

 

#include<stdio.h>

#include<stdlib.h>

#include<locale.h>

#include"recursion.h"

#include"struct.h"

#include"file.h"

#include"sort.h"

#include"stack_tqueue.h"

#include"tree.h"

#include"graf.h"

int main()

{

setlocale(LC_ALL,"Russian");

int m;

for(;;)

{

printf("Меню:\n");

printf("1-Рекурсии\n");

printf("2-Cтруктуры\n");

printf("3-Файлы\n");

printf("4-Cортировки\n");

printf("5-Cтеки и очереди\n");

printf("6-Деревья\n");

printf("7-Графы\n");

printf("8-Выход\n");

do

{

printf("Выберите пункт меню:");

scanf("%d",&m);

} while (m<0||m>9);

switch (m)

{

case 1:

{

system("cls");

rec_menu();

system("cls");

break;

}

case 2:

{

system("cls");

main_struct();

system("cls");

break;

}

case 3:

{

system("cls");

file_main();

system("cls");

break;

}

case 4:

{

system("cls");

sort_main();

system("cls");

break;

}

case 5:

{

system("cls");

main_menu();

system("cls");

break;

}

case 6:

{

system("cls");

main_tree();

system("cls");

break;

}

case 7:

{

system("cls");

main_graf();

system("cls");

break;

}

case 8:exit(1);

}

}

system("pause");

return 0;

}

 

 

ЗАКЛЮЧЕНИЕ

Работа выполнена в рамках курсовой работы по дисциплине «Программирование». В данной работе создан многофайловый проект на языке Си в среде Visual Studio. Проект содержит программный код для решения практических задач по темам: рекурсия, структуры, файлы, сортировки, стеки, очереди, деревья и графы. По темам: структуры, файлы, стеки, очереди, деревья, графы решена одна задача. По темам рекурсии и сортировки решено две задачи. В главной функции проекта main() содержится код для организации меню вызова подзадач. В заголовочных файлах содержаться прототипы функций заданий. В файле «main.cpp» содержится главное меню для перехода по темам проекта. В остальных файлах содержаться подменю для перехода в функции заданий или возврата в главное меню.
Цель курсовой работы достигнута. Данная работа показывает степень сформированности профессиональных компетенций, указанных в рабочей программе дисциплины, связанных с использованием теоретических и практических знаний в области алгоритмизации и программирования.

 

 

Список использованной литературы

1. Б. Керниган, Д. Ритчи «Язык программирования Си

2. Подбельский В.В., Фомин С.С. «Программирование на языке Си»

3. С.О. Бочков Д.М. Субботин «Язык программирования Си для персонального компьютера»

 

Приложение

1. Полный листинг программы «Структуры»

 

#include<stdio.h>

#include<stdlib.h>

void output(void);

void day(void);

void last_year(void);

void input(void);

struct

{

int d;

int m;

int y;

}b[100];

void main_struct(void)

{

printf("Структуры\n");

for(;;)

{

int c;

printf("1-Ввод новой даты\n");

printf("2-Вывод всех дат\n");

printf("3-Нахождение самой поздней даты\n");

printf("4-Определение дня по номеру\n");

printf("5-Вернуться в главное меню\n");

do

{

printf("Введите номер нужного пункта:");

scanf("%d",&c);

}while(c<0 || c>5);

switch(c)

{

case 1:

{

input();system("PAUSE");

system("cls");break;

}

case 2:

{

output();system("PAUSE");

system("cls");break;

}

case 3:

{

last_year();system("PAUSE");

system("cls");break;

}

case 4:

{

day();system("PAUSE");

system("cls");break;

}

case 5: return;

}

}

}

void input(void)

{

FILE *f;

int i=0,q;

f=fopen("Структура.Даты.txt","a+");

if(f==NULL)

{

printf("Невозможно открыть файл\n");

return;

}

for(int j=0;;j++)

{

printf("Добавить дату?\n");

printf("1-Да\n2-Нет\nОтвет:");

scanf("%d",&q);

switch(q)

{

case 1:

{

printf("Введите день:");

scanf("%d",&b[j].d);

fprintf(f,"%d ",b[j].d);

printf("Введите месяц:");

scanf("%d",&b[j].m);

fprintf(f,"%d ",b[j].m);

printf("Введите год:");

scanf("%d",&b[j].y);

fprintf(f,"%d\n",b[j].y);

continue;

}

case 2: return;

}

}

fclose(f);

}

void output(void)

{

FILE *f;

char c;

int i=0;

if((f=fopen("Структура.Даты.txt","r+"))==NULL)

{

printf("Невозможно открыть файл\n");

return;

}

printf("Даты:\n");

while((c=getc(f))!=EOF)

{

ungetc(c,f);

fscanf(f,"%d",&b[i].d);printf("%d)%d.",i+1,b[i].d);

fscanf(f,"%d",&b[i].m);printf("%d.",b[i].m);

fscanf(f,"%d",&b[i].y);printf("%d.\n",b[i].y);

i++;

}

fclose(f);

}

void last_year(void)

{

FILE *f;

int i=0,m,max=b[0].y,k=0,h[20],cnt=0,cnt1=0,g,max2,max3;

char c;

if((f=fopen("Структура.Даты.txt","r"))==NULL)

{

printf("Невозможно открыть файл\n");

return;

}

while((c=getc(f))!=EOF)

{

ungetc(c,f);

fscanf(f,"%d",&b[i].d);

fscanf(f,"%d",&b[i].m);

fscanf(f,"%d",&b[i].y);

i++;

}

fclose(f);

for(int j=1;j<i-1;j++)

{

if(b[j].y>max)

{

max=b[j].y;

m=j;

cnt++;

}

}

if(cnt>0)

{

for(int j=0;j<i-1;j++)

{

if(b[j].y==max)

{

h[k]=j;

k++;

}

}

max2=b[h[0]].m;

for(int l=0;l<k;l++)

{

if(b[h[l]].m>max2)

{

max2=b[h[l]].m;

g=h[l];

cnt1++;

}

}

}

else

{

for(int l=0;l<i;l++)

{

if(max==b[l].y)

printf("Cамая поздняя дата:%d %d d\n",b[l].d,b[l].m,b[l].y);

}

}

if(cnt1>0)

{

int h1[20],k1=0;

for(int j=0;j<i-1;j++)

{

if(b[j].m==max2)

{

h1[k1]=j;

k1++;

}

}

max3=b[h1[0]].d;

for(int r=0;r<k1;r++)

{

if(b[h1[r]].d>max3)

{

max3=b[h1[r]].d;

}

}

printf("Cамая поздняя дата:%d %d %d\n",max3,max2, max);

}

else

{

for(int l=0;l<i;l++)

{

if(max==b[l].y&&max2==b[l].m)

printf("Cамая поздняя дата:%d %d %d\n",b[l].d,b[l].m,b[l].y);

}

}

 

fclose(f);

}

void day(void)

{

struct day

{

int d1;

int y1;

}b;

printf("Введите день:");scanf("%d",&b.d1);

printf("Введите год:");scanf("%d",&b.y1);

printf("Вы ввели:");

if(((b.y1%4==0&&b.y1%100!=0)||b.y1%400==0))

{

if(b.d1>=1&&b.d1<=31) //январь

printf("%d января %d года\n",b.d1,b.y1);

if(b.d1>=32&&b.d1<=60) //февраль

{

for(int i=32,j=1;i<=60,j<=29;i++,j++)

if(b.d1==i)

{

b.d1=j;

printf("%d февраля %d года\n",b.d1,b.y1);

break;

}

}

if(b.d1>=61&&b.d1<=91) //март

{

for(int i=61,j=1;i<=91,j<=31;i++,j++)

if(b.d1==i)

{

b.d1=j;

printf("%d марта %d года\n",b.d1,b.y1);

break;

}

}

if(b.d1>=92&&b.d1<=121) //апрель

{

for(int i=92,j=1;i<=121,j<=30;i++,j++)

if(b.d1==i)

{

b.d1=j;

printf("%d апреля %d года\n",b.d1,b.y1);

break;

}

}

if(b.d1>=122&&b.d1<=152) //май

{

for(int i=122,j=1;i<=152,j<=31;i++,j++)

if(b.d1==i)

{

b.d1=j;

printf("%d мая %d года\n",b.d1,b.y1);

break;

}

}

if(b.d1>=153&&b.d1<=182) //июнь

{

for(int i=153,j=1;i<=182,j<=30;i++,j++)

if(b.d1==i)

{

b.d1=j;

printf("%d июня %d года\n",b.d1,b.y1);

break;

}

}

if(b.d1>=183&&b.d1<=213) //июль

{

for(int i=183,j=1;i<=213,j<=31;i++,j++)

if(b.d1==i)

{

b.d1=j;

printf("%d июля %d года\n",b.d1,b.y1);

break;

}

}

if(b.d1>=214&&b.d1<=244) //август

{

for(int i=214,j=1;i<=244,j<=31;i++,j++)

if(b.d1==i)

{

b.d1=j;

printf("%d августа %d года\n",b.d1,b.y1);

break;

}

}

if(b.d1>=245&&b.d1<=274) //сентябрь

{

for(int i=245,j=1;i<=274,j<=30;i++,j++)

if(b.d1==i)

{

b.d1=j;

printf("%d сентября %d года\n",b.d1,b.y1);

break;

}

}

if(b.d1>=275&&b.d1<=305) //октябрь

{

for(int i=275,j=1;i<=305,j<=31;i++,j++)

if(b.d1==i)

{

b.d1=j;

printf("%d октября %d года\n",b.d1,b.y1);

break;

}

}

if(b.d1>=306&&b.d1<=335) //ноябрь

{

for(int i=306,j=1;i<=335,j<=30;i++,j++)

if(b.d1==i)

{

b.d1=j;

printf("%d ноября %d года\n",b.d1,b.y1);

break;

}

}

if(b.d1>=336&&b.d1<=366) //декабрь

{

for(int i=336,j=1;i<=366,j<=31;i++,j++)

if(b.d1==i)

{

b.d1=j;

printf("%d декабря %d года\n",b.d1,b.y1);

break;

}

}

}

else

{

if(b.d1>=1&&b.d1<=31) //январь

printf("%d января %d года\n",b.d1,b.y1);

if(b.d1>=32&&b.d1<=59) //февраль

{

for(int i=32,j=1;i<=59,j<=28;i++,j++)

if(b.d1==i)

{

b.d1=j;

printf("%d февраля %d года\n",b.d1,b.y1);

break;

}

}

if(b.d1>=60&&b.d1<=90) //март

{

for(int i=60,j=1;i<=90,j<=31;i++,j++)

if(b.d1==i)

{

b.d1=j;

printf("%d марта %d года\n",b.d1,b.y1);

break;

}

}

if(b.d1>=91&&b.d1<=120) //апрель

{

for(int i=91,j=1;i<=120,j<=30;i++,j++)

if(b.d1==i)

{

b.d1=j;

printf("%d апреля %d года\n",b.d1,b.y1);

break;

}

}

if(b.d1>=121&&b.d1<=151) //май

{

for(int i=121,j=1;i<=150,j<=31;i++,j++)

if(b.d1==i)

{

b.d1=j;

printf("%d мая %d года\n",b.d1,b.y1);

break;

}

}

if(b.d1>=152&&b.d1<=181) //июнь

{

for(int i=152,j=1;i<=181,j<=30;i++,j++)

if(b.d1==i)

{

b.d1=j;

printf("%d июня %d года\n",b.d1,b.y1);

break;

}

}

if(b.d1>=182&&b.d1<=212) //июль

{

for(int i=182,j=1;i<=212,j<=31;i++,j++)

if(b.d1==i)

{

b.d1=j;

printf("%d июля %d года\n",b.d1,b.y1);

break;

}

}

if(b.d1>=213&&b.d1<=243) //август

{

for(int i=213,j=1;i<=243,j<=31;i++,j++)

if(b.d1==i)

{

b.d1=j;

printf("%d августа%d года\n",b.d1,b.y1);

break;

}

}

if(b.d1>=244&&b.d1<=273) //сентябрь

{

for(int i=244,j=1;i<=273,j<=30;i++,j++)

if(b.d1==i)

{

b.d1=j;

printf("%dсентября%dгода\n",b.d1,b.y1);

break;

}

}

if(b.d1>=274&&b.d1<=304) //октябрь

{

for(int i=274,j=1;i<=304,j<=31;i++,j++)

if(b.d1==i)

{

b.d1=j;

printf("%d октябр %d года\n",b.d1,b.y1);

break;

}

}

if(b.d1>=305&&b.d1<=334) //ноябрь

{

for(int i=305,j=1;i<=334,j<=30;i++,j++)

if(b.d1==i)

{

b.d1=j;

printf("%dноября%d года\n",b.d1,b.y1);

break;

}

}

if(b.d1>=335&&b.d1<=365) //декабрь

{

for(int i=335,j=1;i<=365,j<=31;i++,j++)

if(b.d1==i)

{

b.d1=j;

printf("%dдекабря%d года\n",b.d1,b.y1);

break;

}

}

}

}

2. Полный листинг программы «Файлы»

 

#include<stdlib.h>

#include<stdio.h>

#include<string.h>

void file(void);

void file_main()

{

int q;

printf("Файлы\n");

for(;;)

{

printf("1-Задание\n");

printf("2-Вернуться в главное меню\n");

do

{

printf("Выберите пункт меню:");

scanf("%d",&q);

}while(q<0||q>3);

switch (q)

{

case 1:

{

file();

system("pause");

system("cls");

break;

}

case 2: return;

}

}

}

void file(void)

{

printf("Имеется текстовый файл.\nПереписать его строки в другой файл, \nпоменяв местами слова в строках. \n");

printf("========================\n");

char *p,e,s[100][100],b[100][100];

int i=0,j=0,h,l=0;

FILE *f;

if((f=fopen("Файл(И).txt","r"))==NULL)

{

printf("Невозможно открыть файл\n");

return;

}

FILE *fp;

if((fp=fopen("Файл2.txt","w"))==NULL)

{

printf("Невозможно открыть файл\n");

return;

}

printf("Исходный текст:\n");

while ((e=getc(f))!=EOF)

{

ungetc(e,f);

fgets(s[i],sizeof(s[i]),f);

puts(s[i]);

i++;

}

for(int g=0;g<i;g++)

{

h=j;

p=strtok(s[g],".,\n");

while(p!=NULL)

{

strcpy(b[j],p);

j++;

p=strtok(NULL,".,\n");

}

for(int m=j-1;m>=h;m--)

{

fprintf(fp,"%s ",b[m]);

}

fprintf(fp,"\n");

}

fcloseall();

if((fp=fopen("Файл2.txt","r"))==NULL)

{

printf("Невозможно открыть файл\n");

return;

}

printf("Полученный текст:\n");

while ((e=getc(fp))!=EOF)

{

ungetc(e,fp);

fgets(s[l],sizeof(s[l]),fp);

puts(s[l]);

l++;

}

fclose(fp);

}

 

3. Полный листинг программы «Сортировки»

 

#include <stdio.h>

#include <stdlib.h>

#include <string.h>

void bubble_sort_fn(void);//вывод и сортировка списка по фамилиии и имени

void bubble_sort_fam(struct sp *a,int n);//сортировка списка по фамилии

void insertion_sort(int *a,int t);//сортировка массив

void insert_sort(void);//функция вывода и сортировки массива

void bubble_sort_name(struct sp *b,int n);//функция сортирует по имени

struct sp

{

int nm;

char f[30];

char name[20];

char o[25];

int y;

char note[6];

}a[100],temp,b[100];

void sort_main()

{

int q;

for(;;)

{

printf("Сортировки\n");

printf("1-Задание №1\n");

printf("2-Задание №2\n");

printf("3-Вернуться в главное меню\n");

do

{

printf("Выберите пункт меню:");

scanf("%d",&q);

}while(q<0||q>4);

switch (q)

{

case 1:

{

insert_sort();

system("pause");

system("cls");

break;

}

case 2:

{

bubble_sort_fn();

system("pause");

system("cls");

break;

}

case 3: return;

}

}

}

void insert_sort(void)//с массивом

{

printf("Задание:\n");

printf("Дана матрица размерностью NxN,\nсодержащая целые числа. \nОтсортировать диагонали матрицы,\n");

printf("расположенные выше главной \nпо убыванию элементов методом вставки\n");

printf("===================\n");

FILE *f;

if((f=fopen("Сортировка.Массив.txt","r"))==NULL)

{

printf("Невозможно открыть файл\n");

return;

}

int i,j,m,n,a[100][100],s[100],t=0;

char c;

printf("Неотсортированный массив:\n");

while((c=getc(f))!=EOF)

{

ungetc(c,f);

fscanf(f,"%d",&n);

fscanf(f,"%d",&m);

for(i=0;i<n;i++)

{

for(j=0;j<n;j++)

{

fscanf(f,"%d",&a[i][j]);

printf("%d ",a[i][j]);

}

printf("\n");

}

break;

}

fclose(f);

printf("====================\n");

for(j=1;j<n-1;j++)

{

for(i=0;i<n-j;i++)

{

s[t]=a[i][i+j];

t++;

}

insertion_sort(s,t);

t=0;

for(i=0;i<n-j;i++)

{

a[i][j+i]=s[t];

t++;

}

t=0;

}

printf("Oтсортированный массив:\n");

if((f=fopen("Сортировка.Массив(2).txt","w"))!=NULL)

{

fprintf(f,"%d ",n);

fprintf(f,"%d\n",m);

for(i=0;i<n;i++)

{

for(j=0;j<m;j++)

{

fprintf(f,"%d ",a[i][j]);

printf("%d ",a[i][j]);

}

fprintf(f,"\n");

printf("\n");

}

fclose(f);

}

else

{

printf("Невозможно открыть файл\n");

return;

}

}

void bubble_sort_fn(void)

{

printf("Задание:\n");

printf("Переписать данные из файла \"Сортировка списка(r).txt\" в файл \"Сортировка списка(w).txt\"\n");

printf("отсортировав их в алфавитном порядкe\nпо фамилии и имени методом пузырька\n");

printf("=====================\n");

FILE *f;

if((f=fopen("Сортировка списка(r).txt","r"))==NULL)

{

printf("Невозможно открыть файл\n");

return;

}

char c;

int i=0,j=0,l=0,m;

printf("Исходный список:\n");

while ((c=getc(f))!=EOF)

{

ungetc(c,f);

printf("%d)",i+1);

fscanf(f,"%d",&a[i].nm);

printf("%d ",a[i].nm);

fscanf(f,"%s",a[i].f);

printf("%s ",a[i].f);

fscanf(f,"%s ",a[i].name);

printf("%s ",a[i].name);

fscanf(f,"%s",a[i].o);

printf("%s ",a[i].o);

fscanf(f,"%d",&a[i].y);

printf("%d ",a[i].y);

for(int j=0;j<5;j++)

{

fscanf(f,"%d",&a[i].note[j]);

printf("%d ",a[i].note[j]);

}

printf("\n");

i++;

}

fclose(f);

if((f=fopen("Сортировка списка(w).txt","w"))!=NULL)

{

bubble_sort_fam(a,i);

printf("Отсортированный список:\n");

do

{

memcpy(&temp, &a[l],sizeof(sp));

for(m=l;m<i;m++)

{

if(strcmp(temp.f,a[m].f)==0)

{

memcpy(&b[j], &a[m],sizeof sp);

l=m;

j++;

}

}

bubble_sort_name(b,j);

for(int k=0;k<j;k++)

{

printf("%d)",k+1);

printf("%d ",b[k].nm);

fprintf(f,"%d ",b[k].nm),

printf("%s ",b[k].f);

fprintf(f,"%s ",b[k].f);

printf("%s ",b[k].name);

fprintf(f,"%s ",b[k].name);

printf("%s ",b[k].o);

fprintf(f,"%s ",b[k].o);

printf("%d ",b[k].y);

fprintf(f,"%d ",b[k].y);

for(int o=0;o<5;o++)

{

printf("%d ",b[k].note[o]);

fprintf(f,"%d ",b[k].note[o]);

}

printf("\n");

fprintf(f,"\n");

}

j=0;

l++;

}while(l<i);

}

fclose(f);

}

void bubble_sort_fam(struct sp *a,int n)

{

int i,j;

for(i=0;i<=n-2;i++)

for (j=0;j<=n-2-i;j++)

if (strcmp(a[j+1].f,a[j].f)<0)

{

memcpy(&temp, &a[j+1], sizeof(sp));

memcpy(&a[j+1], &a[j], sizeof(sp));

memcpy(&a[j], &temp, sizeof(sp));

}

}

void bubble_sort_name(struct sp *b,int n)

{

int i,j;

for (i=0;i<=n-2;i++)

for (j=0;j<=n-2-i;j++)

if (strcmp(b[j+1].name,b[j].name)<0)

{

memcpy(&temp, &b[j+1], sizeof(sp));

memcpy(&b[j+1], &b[j], sizeof(sp));

memcpy(&b[j], &temp, sizeof(sp));

}

}

void insertion_sort(int *a,int t)

{

int i,j,temp;

for (i=1;i<t;i++)

{

temp=a[i];

j=i-1;

while ((j>=0)&&(a[j]<temp))

{

a[j+1] =a[j];

j--;

}

a[j+1]=temp;

}

}

 

4. Полный листинг программы «Стеки и очереди»

 

#include<stdio.h>

#include<stdlib.h>

#include<string.h>

#define open_file "Невозможно открыть файл.\n"

#define text "Исходный текст:\n"

#define spisok "Исходный список элементов:\n"

#define out_spisok "Полученный список элементов:\n"

struct st

{

char a[100]; //информационное поле целого типа

st *n; //указатель на следующий элемент стека

}*head;

struct tqueue

{

int inf;

tqueue *next;

}*h,*t;

st *in_s()

{

return NULL;

}

void push (st *&s, char i[100]);

char *pop(st *&s);

int empty_st(st *s);

void init_tq(tqueue *&h, tqueue *&t);

void insert_tq(tqueue *&h,tqueue *&t, int item);

int take_tq(tqueue *&h, tqueue *&t);

int empty_tq(struct tqueue *h);

void stack();

void tqueue_f();

void main_menu()

{

int q;

for(;;)

{

printf("1-Стек\n");

printf("2-Очередь\n");

printf("3-Вернуться к главному меню\n");

do

{

printf("Выберите пункт меню:");

scanf("%d",&q);

}while(q<0||q>4);

switch(q)

{

case 1:

{

stack();

system("pause");

system("cls");

break;

}

case 2:

{

tqueue_f();

system("pause");

system("cls");

break;

}

case 3: return;

}

}

}

void stack()

{

printf("Задание:\n");

printf("Создать список из слов,\n");

printf("в который все слова исходного текста\n");

printf("входят только один раз.\n");

printf("===================\n");

FILE *f;

if((f=fopen("Стек.txt","r"))==NULL)

{

printf("%s",open_file);

return;

}

char c,*s,p[100][100],a[100];

int i=0,cnt=0;

printf("%s",text);

while((c=getc(f))!=EOF)

{

ungetc(c,f);

fgets(a,sizeof(a),f);

puts(a);

s=strtok(a,",.\n");

while (s!=NULL)

{

strcpy(p[i],s);

i++;

s=strtok(NULL,".,\n");

}

}

for(int k=0;k<i;k++)

{

for(int l=k+1;l<i;l++)

{

if(strcmp(p[k],p[l])==0)

cnt++;

}

if(cnt==0)

{

push(head,p[k]);

}

cnt=0;

}

printf("%s",out_spisok);

while(!empty_st(head))

{

printf("%s\n",pop(head));

}

}

void tqueue_f()

{

printf("Задание:\n");

printf("Создать список из чисел. \n");

printf("Исключить все повторяющиеся подряд элементы.\n");

printf("оставить по одному из них\n");

printf("===================\n");

FILE *f;

if((f=fopen("Очередь.txt","r"))==NULL)

{

printf("%s",open_file);

return;

}

char c;

int q[50],i=0;

printf("%s",spisok);

while ((c=getc(f))!=EOF)

{

ungetc(c,f);

fscanf(f,"%d",&q[i]);

printf("%d ",q[i]);

i++;

}

printf("\n");

int cnt=0,k=0,l;

do

{

l=k+1;

while (q[k]==q[l])

{

k=l;

l++;

}

insert_tq(h,t,q[k]);

k++;

}while(k<i);

printf("%s",out_spisok);

while (!empty_tq(h))

{

printf("%d ",take_tq(h,t));

}

printf("\n");

fclose(f);

}

//Функции стека

void push (st *&s, char i[100])//добавление элемента

{

st *r=(st*)malloc(sizeof(st));

strcpy(r->a,i);

r->n=s;

s=r;

}

char* pop(st *&s)//выборка верхнего

{

st *r=s;

//char i1[100];

char *i=(char*)calloc(100,sizeof(char));

strcpy(i,r->a);

s=r->n;

free(r);

return i;

}

int empty_st(st *s)

{

return (s)?0:1;

}

void init_tq(struct tqueue *&h,struct tqueue *&t)//инициализация очереди

{

h=t=NULL;

}

void insert_tq(struct tqueue *&h,struct tqueue *&t, int item)//Добавление элемента в очередь

{

tqueue *r=new tqueue;

r->inf=item;

r->next=NULL;

if (!h&&!t)

h=t=r;

else

{

t->next=r;

t=r;

}

}

int take_tq(struct tqueue *&h,struct tqueue *&t)//выборка верхнего элемента

{

tqueue *r=h;

int i=r->inf;

h=r->next;

if (!h)

t=NULL;

free(r);

return i;

}

int empty_tq(struct tqueue *h)//определение пустоты очереди

{

return(h)?0:1;

}

5. Полный листинг программы «Деревья»

 

#include<stdio.h>

#include<stdlib.h>

struct tree

{

int inf;

tree *l;

tree *r;

}*t;

//переменные для сред.арифм.

int sum=0,cnt=0;

void treeE();

//прототипы функций дерева

void preorder(tree *tr);

void inorder(tree *tr);

void postorder(tree *tr);

void add(int x, tree *&tr);

void search(int x, tree *tr);

void del_tree(tree *&tr);

void print_list(tree *tr);

void main_tree (void)

{

//Найти все вершины графа, недостижимые из заданной вершины

printf("Деревья\n");

for(;;)

{

printf("1-Задание\n");

printf("2-Вернуться к главному меню\n");

int q;

do

{

printf("Выберите пункт меню:");

scanf("%d",&q);

}while(q<0||q>3);

switch (q)

{

case 1:

{

treeE();

system("pause");

system("cls");

break;

}

case 2: return;

}

}

}

void treeE()

{

printf("Oпределить среднее арифметическое значение узлов дерева.\n");

printf("========================\n");

int a;

FILE *f;

if((f=fopen("Деревья.txt","r"))==NULL)

{

printf("Невозможно открыть файл.\n");

return;

}

tree *t=NULL;

while (!feof(f))

{

fscanf(f,"%d",&a);

add(a,t);

}

printf("Прямой обход:\n");

preorder(t);

printf("\n");

printf("Среднее арифметическое значение узлов:%.2f ",(float)sum/cnt);

printf("\n");

del_tree(t);

fcloseall();

}

//функции дерева

void preorder(tree *tr)//прямой обход

{

 

if (tr)

{

printf("%d ",tr->inf);

sum+=tr->inf;

cnt++;

preorder(tr->l);

preorder(tr->r);

}

}

void inorder(tree *tr)//симметричный обход

{

if (tr)

{

inorder(tr->l);

printf("%d ",tr->inf);

inorder(tr->r);

}

}

void postorder(tree *tr)//обратный обход

{

if (tr)

{

postorder(tr->l);

postorder(tr->r);

printf("%d ",tr->inf);

}

}

void add(int x, tree *&tr)//построение бинарного дерева

{

if (!tr)

{

tr=(tree*)malloc(sizeof(tree));

tr->inf=x; tr->l=tr->r=NULL;

}

else if (x < tr->inf)

add(x,tr->l);

else if (x > tr->inf)

add(x,tr->r);

}

void search(int x, tree *tr)//поиск по дереву

{

if (!tr)

printf ("Не найдено!");

else if (x < tr->inf)

search(x,tr->l);

else if (x > tr->inf)

search(x,tr->r);

else

printf("%d ",tr->inf);

}

void del_tree(tree *&tr)//удаление дерева

{

if (tr)

{

del_tree(tr->l);

del_tree(tr->r);

free(tr);

tr=NULL;

}

}

void print_list(tree *tr)//распечатывание листьев

{

if (tr) //если узел не пустой

{

if (tr->l==NULL&&tr->r==NULL)

printf("%d ",tr->inf);

else

{

print_list(tr->l);

print_list(tr->r);

}

}

}

 

6. Полный листинг программы «Графы»

 

#include<stdio.h>

#include<stdlib.h>

//описание глобальных переменных

void graf(void);

void main_graf()

{

//Найти все вершины графа, недостижимые из заданной вершины

printf("Графы\n");

for(;;)

{

printf("1-Задание\n");

printf("2-Вернуться к главному меню\n");

int q;

do

{

printf("Выберите пункт меню:");

scanf("%d",&q);

}while(q<0||q>3);

switch (q)

{

case 1:

{

graf();

system("pause");

system("cls");

break;

}

case 2: return;

}

}

}

void graf(void)

{

printf("Найти все вершины графа, недостижимые из заданной вершины\n");

FILE *f=fopen("Графы(r).txt","r");

int i,j,num,i2,n,**gr,q[10],cnt=0;

char c;

 

while((c=getc(f))!=EOF)

{

ungetc(c,f);

fscanf(f,"%d",&n);

gr=(int **)malloc(sizeof(int *)*n);

for(i=0;i<n;i++)

{

gr[i]=(int *)malloc(sizeof(int)*n);

for(j=0;j<n;j++)

{

fscanf(f,"%d",&gr[i][j]);

//printf("%d ",gr[i][j]);

}

//printf("\n");

}

}

for(i=0;i<n;i++)

{

for(j=0;j<n;j++)

{

if(gr[i][j]==1)

printf("%d->%d\n",i+1,j+1);

 

}

}

printf("Количество вершин:%d\nВводимое число должно быть 0<n<%d\n",n,n);

do

{

printf("Номер вершины:");

scanf("%d",&num);

}while(num>n||num<0);

for(i=0;i<n;i++)

q[i]=0;

for(i=0;i<n;i++)

{

if(gr[num-1][i]==1)

q[i]=1;

}

for(i=0;i<n;i++)

if (q[i]==1)

for(i2=0;i2<n;i2++)

if(gr[i][i2]==1)

q[i2]=1;

printf("Найденные вершины:");

for(i=0;i<n;i++)

if(q[i]==0)

{

printf("%d ",i+1);

cnt++;

}

if(!cnt) printf("вершины недостижимые вершиной:%d не найдены",num);

printf("\n");

for(i=0;i<n;i++)

q[i]=0;

fcloseall();

for(i=0;i<n;i++)

free(gr[i]);

free(gr);

}

 



Поделиться:




Поиск по сайту

©2015-2024 poisk-ru.ru
Все права принадлежать их авторам. Данный сайт не претендует на авторства, а предоставляет бесплатное использование.
Дата создания страницы: 2017-07-02 Нарушение авторских прав и Нарушение персональных данных


Поиск по сайту: