Перейти к содержанию
СофтФорум - всё о компьютерах и не только

Заказы "Сделайте все за меня"


Рекомендуемые сообщения

Шёпот

Такое впечатление, что задание ты снимал шпионской камерой в сейфе Пентагона в полной темноте навскидку... ;)

Алгоритм Прима недалеко ушел от таблицы умножения... Программа поиска минимального остовного дерева алгоритмом Прима для твоего примера:

#include<iostream>int main(){const int N=10; int C[N],R[N-1][2],i,j,k,m,ci,cj; for(i=0;i<N;i++)C[i]=i;int W[N][N]={//0  1  2  3  4  5  6  7  8  9    0, 6, 3, 0, 9, 0, 0, 0, 0, 0, //0 6, 0, 4, 2, 0, 0, 9, 0, 0, 0, //1 3, 4, 0, 2, 9, 9, 0, 0, 0, 0, //2 0, 2, 2, 0, 0, 8, 9, 0, 0, 0, //3 9, 0, 9, 0, 0, 8, 0, 0, 0,18, //4 0, 0, 9, 8, 8, 0, 7, 0, 9,10, //5 0, 9, 0, 9, 0, 7, 0, 4, 5, 0, //6 0, 0, 0, 0, 0, 0, 4, 0, 1, 4, //7 0, 0, 0, 0, 0, 9, 5, 1, 0, 3, //8 0, 0, 0, 0,18,10, 0, 4, 3, 0};//9for(k=0;k<N-1;k++){ m=10000; for(i=0;i<N;i++)for(j=i+1;j<N;j++) if(C[i]!=C[j]&&W[i][j]<m&&W[i][j]!=0){m=W[i][j]; R[k][0]=i; R[k][1]=j; ci=C[i]; cj=C[j];} for(i=0;i<N;i++)if(C[i]==cj)C[i]=ci;}for(k=0;k<N-1;k++)std::cout<<R[k][0]<<'-'<<R[k][1]<<std::endl; getchar();}

Результаты для твоего примера совпадают с показанным на рисунке решением твоего примера.

  • Upvote 1
Ссылка на комментарий
Поделиться на другие сайты

NickLid

#include <iostream>using namespace std;struct Tree{Tree *L,*R;};int n; Tree *T=0;int ct(Tree *w,int l) {int d=0; if(w->L)d+=ct(w->L,l+1); if(w->R)d+=ct(w->R,l+1); if(n==l)d++; return d;}void al(Tree **w){Tree* k; *w=new Tree; k=*w; k->L=0;k->R=0;}int main(){al(&T); al(&T->L); al(&T->R); al(&T->L->L); al(&T->L->L->R); al(&T->L->L->L); al(&T->R->L); al(&T->L->R); // задали тестовое деревоcout<<"niveau: "; cin>>n; cout<<ct(T,0)<<endl; cin.get(); cin.get();}
  • Upvote 1
Ссылка на комментарий
Поделиться на другие сайты

NickLid

#include <iostream>using namespace std;struct Tree{Tree *L,*R;};int n; Tree *T=0;int ct(Tree *w,int l) {int d=0; if(w->L)d+=ct(w->L,l+1); if(w->R)d+=ct(w->R,l+1); if(n==l)d++; return d;}void al(Tree **w){Tree* k; *w=new Tree; k=*w; k->L=0;k->R=0;}int main(){al(&T); al(&T->L); al(&T->R); al(&T->L->L); al(&T->L->L->R); al(&T->L->L->L); al(&T->R->L); al(&T->L->R); // задали тестовое деревоcout<<"niveau: "; cin>>n; cout<<ct(T,0)<<endl; cin.get(); cin.get();}

Тролль, спасибо огромное! А можно комментарии)))

Ссылка на комментарий
Поделиться на другие сайты

Нужна прога плиз...С++.

Используя очередь или стек, описать процедуру или функцию, которая ищет элемент самого левого листа непустого дерева Т.

Ссылка на комментарий
Поделиться на другие сайты

Здравствуйте! Помогите, пожалуйста...

Используя стек, решить следующую задачу.

В текстовом файле f записана без ошибок формула следующего вида:

<формула> ::= <цифра> | М(<формула>, <формула>) | m(<формула>, <формула>)

<цифра> ::= 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9, где М обозначает функцию max, a m- min. Вычислить как целое число значение данной формулы. Например, М(5,m (6,8))=6.

#include <ctype.h>

#include <string.h>

#include <stdlib.h>

#include <stdio.h>

#include <fstream>

#include <iostream>

using namespace std;

const int maxf=0,minf=1,size=100;

typedef struct _t{int data[size]; int cur;}st;

void init(st* s){for(int i=0;i<size;i++)s->data[i]=0; s->cur=-1;}

int empty(st *s){return s->cur==-1;}

void push(st *s,int i){s->data[++(s->cur)]=i;}

int pop(st *s){return empty(s)?0:s->data[(s->cur)--];}

int main(){

ifstream input_file("f.txt");

const int l=100; char e[l]; char buf[l]; st s; init(&s);

input_file.getline(e,l,'\n');

int i,j,len=strlen(e);

for(i=0;i<len;i++){if(e[i]=='M'){push(&s,maxf); continue;}

if(e[i]=='m'){push(&s,minf); continue;}

if(isdigit(e[i])){j=0; while(isdigit(e[i]))buf[j++]=e[i++]; buf[j]=' '; push(&s,atoi(buf));}

if(e[i]==')'){int b=pop(&s); int a=pop(&s); int func=pop(&s); if(func==maxf)push(&s,a>b?a:b);

else push(&s,a<b?a:b);}}

cout<<e<<endl<<pop(&s)<<endl; cin.get();

}

Можно комментарии к коду?

И, если конечно возможно, блок-схему.

Буду очень благодарен!

И буду ещё раз пресильно благодарен, если поможете с этим!

Написать на С++.

Разработать рекурсивную функцию, которая определяет, помещена ли строка в бинарное дерево поиска.

Код + блок-схема.

Восхвалять буду всю жизнь!=))

Изменено пользователем Serty
Ссылка на комментарий
Поделиться на другие сайты

NickLid

А можно комментарии)))
Тут не о чем писать. Если с вас требуют комментарии, мог бы написать и сам в стиле "Ввод...", "Вывод..."
#include <iostream>// подключение потоков ввода/выводаusing namespace std;// использование стандартного пространства именstruct Tree{Tree *L,*R;}; int n; Tree *T=0;// объявление  дереваint ct(Tree *w,int l)// подсчет числа вершин в счетчике d рекурсивным спуском {int d=0; if(w->L)d+=ct(w->L,l+1); if(w->R)d+=ct(w->R,l+1); if(n==l)d++; return d;}void al(Tree **w){Tree* k; *w=new Tree; k=*w; k->L=0;k->R=0;}// создание новой вершины дереваint main(){al(&T); al(&T->L); al(&T->R); al(&T->L->L); al(&T->L->L->R); al(&T->L->L->L); al(&T->R->L); al(&T->L->R);// задание тестового дереваcout<<"niveau: "; cin>>n;// ввод уровня дереваcout<<ct(T,0)<<endl;// подсчет количества вершин на заданном уровнеcin.get(); cin.get();// задержка окна вывода до нажатия Enter}
Изменено пользователем Тролль
Ссылка на комментарий
Поделиться на другие сайты

Simik

С++. Используя очередь или стек, описать процедуру или функцию, которая ищет элемент самого левого листа непустого дерева Т.
В C++ нет процедур. Кто пишет вам задания?
#include <iostream>using namespace std;int c=0, cm;struct Tree{int info; Tree *right,*left;};struct STACK{int l; Tree *tree; STACK *next;};Tree *root=NULL; STACK *st=NULL;void Push(Tree *tree, int l){STACK *tmp=new STACK; tmp->tree=tree; tmp->l=l; tmp->next=st; st=tmp;}int Pop(Tree **tree){if(st){STACK *tmp=st; st=st->next; *tree=tmp->tree; int l=tmp->l;delete tmp; return l;}else return 0;}void Create(Tree **cur, int n){if(n==0)*cur=NULL; else {int nl=n/2; int nr=n-nl-1; Tree *tmp=new Tree; c++;tmp->info=rand()%100; Create(&tmp->left,nl); Create(&tmp->right,nr); *cur=tmp;}}void Sh(Tree *cur,int l){if(cur){Sh(cur->left,l+1);  for(int i=0;i<l;i++)cout<<"\t";cm=cur->info;cout<<cur->info<<endl; Sh(cur->right, l+1);}}int main(){int n; cout<<"number of edges: "; cin>>n; Create(&root,n);Sh(root,0); cout<<endl<<"the most left edge="<<cm<<endl; cin.get(); cin.get();}

Запрашивается и вводится количество вершин, создается дерево, заполненное случайными числами до 100, затем дерево просматривается и выводится на экран само дерево и значение самого левого листа.

Изменено пользователем Тролль
  • Upvote 1
Ссылка на комментарий
Поделиться на другие сайты

Добрый вечер помогите решить несколько маленьких программ (обязательно с использованием функций)

1.2.3. Високосный год

В файле vis.c написать функцию isvis, определяющую является ли заданный год ви-сокосным. Функция имеет на входе целое число – номер года, а на выходе возвращает 1 или 0, соответственно, високосный и не високосный. Високосным годом считается тот, чей но-мер делится на 4. Годы, которые делятся на 100, но не делятся на 400, високосными не явля-ются.

То есть, например, 1993 год не високосный – он не делится на 4, и нам нет смысла его рассматривать. 1992 год на 4 делится, но не делится на 100 – данный год является високос-ным. Год 1900 делится на 4 и делится на 100, но не делится на 400, поэтому он не високос-ный. Год 2000 делится на 4 (поэтому он должен быть високосным), делится на 100 (поэтому он НЕ должен быть високосным), но делится на 400, поэтому он високосный.

ООП1 - лабораторные 18.02.2012 12:42 page 5/19

1.2.4. Пробельный символ

В файле spc1.c напишите функцию isspace, определяющую является ли заданный в качестве параметра символ пробельным. 1 – является, 0 – не является. Аналогично предыду-щим заданиям необходимо в функции main создать пример использования данной функции. Нет необходимости в данном случае вводить символы с клавиатуры достаточно задать сим-вол в качестве параметра, непосредственно в вызове функции

Замечание: будем считать, что пробельным символом помимо собственно пробела явля-ются также символ табуляции (’\t’) и перевод строки (’\n’).

1.2.5. Корень линейного уравнения

В файле sqlin2.c оформите в виде функции поиск корня линейного уравнения (см. 1.1.8).

1.2.6. Корни квадратного уравнения

В файле sqsq2.c по аналогии с предыдущим необходимо сделать функцию, вычисля-ющую корни квадратного уравнения (см. 1.1.9). Обратите внимание, что в данной функции может быть от 0 до 2 корней. Значит самое логичное сделать, чтобы данная функция возвра-щала количество вычисленных корней, а значения корней записывались по указателям, пе-реданным в качестве параметров. Декларация функции должна выглядеть, например, так:

1. int get_sqr_root(double a, double b, double c,

2. double *x1, double *x2)

3. {

4. double D;

5. D = …

6. if (D<0.0) return 0;

7. if (D==0.0) {

8. *x1 = *x2 = …

9. return 1;

10. }

11. *x1 = …

12. *x2 = …

13. return 2;

14. }

В первых трех параметрах передаются коэффициенты квадратного уравнения. По указа-телям, переданным в качестве x1 и x2, записываются полученные значения корней уравне-ния. Для отображения вещественных чисел двойной точности (double) используется фор-мат отображения ”%lf”.

1.2.7. Числа Фибоначчи

Цель данного задания найти число ряда Фибоначчи. Число Фибоначчи математически задается следующим образом: fn=fn-1+fn-2, f1=1, f2=1. Таким образом, первые значения ряда Фибоначчи выглядят так: 1, 1, 2, 3, 5, 8, 13, 21, … Высчитайте числа Фибоначчи f5, f20, f100. Оформите данную программу в файле fib1.c. Реализуйте вычисление ряда в виде функции fib. Данная функция должна принимать в качестве входного параметра номер числа Фибо-наччи и возвращать значение данного числа. Суть алгоритма сводится к следующему:

Пусть n – номер числа Фибоначчи

Если n равен 1 или 2, то вернем 1

Пусть fn – очередное число Фибоначчи

Пусть f1 и f2 соответственно предыдущее и предпредыдущее числа Фибоначчи

ООП1 - лабораторные 18.02.2012 12:42 page 6/19

Переменным f1 и f2 присвоим 1

Для всех i от 3 до n включительно сделаем

Начало

fn = f1 + f2

f1 = f2

f2 = fn

конец

вернем fn

Поэкспериментируйте с типами переменных, с которыми вы оперируете (попробуйте ис-пользовать помимо int еще long и double). Для вывода на печать длинных целых (long) используется формат ”%ld”, а для вывода double ”%lf”. Какие результаты Вы получили? Можете объяснить эти результаты?

-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

заранее благодарен

Ссылка на комментарий
Поделиться на другие сайты

Вот есть задачка:

Рекурсивный расчет математического выражения со скобками, рекурсивная функция оформляется в виде потока(задачка на Linux). Код на С.

Слышал, что можно сделать через двоичное дерево, но может есть способ по проще??

Ссылка на комментарий
Поделиться на другие сайты

Serty

Можно комментарии к коду?
Комментарии можно.
#include <ctype.h>#include <string.h>#include <stdlib.h>#include <stdio.h>#include <fstream>#include <iostream>// подключили заголовочные файлы используемых библиотекusing namespace std;// использование стандартного пространства именconst int maxf=0,minf=1,size=100;// определили константыtypedef struct _t{int data[size]; int cur;}st;// объявили тип элемента стекаvoid init(st* s){for(int i=0;i<size;i++)s->data[i]=0; s->cur=-1;}// функция инициализации стекаint empty(st *s){return s->cur==-1;}// функция проверки пустоты стекаvoid push(st *s,int i){s->data[++(s->cur)]=i;}// функция заталкивания элемента в стекint pop(st *s){return empty(s)?0:s->data[(s->cur)--];}// функция извлечения элемента из стекаint main(){ifstream input_file("f.txt");// объявили входной поток из файлаconst int l=100; char e[l]; char buf[l]; st s; init(&s);// объявляем переменные и инициализируем стекinput_file.getline(e,l,'\n');// ввели строку из файлаint i,j,len=strlen(e);// определили длину введенной строкиfor(i=0;i<len;i++){if(e[i]=='M'){push(&s,maxf); continue;} if(e[i]=='m'){push(&s,minf); continue;} if(isdigit(e[i])){j=0; while(isdigit(e[i]))buf[j++]=e[i++]; buf[j]=' '; push(&s,atoi(buf));}// заталкиваем в стек коды операций и числа if(e[i]==')'){int b=pop(&s); int a=pop(&s); int func=pop(&s); if(func==maxf)push(&s,a>b?a:b); else push(&s,a<b?a:b);// если попадается закрывающая скобка, вытаскиваем из стека два числа и код// операции, производим операцию и закидываем результат обратно в стек}}cout<<e<<endl<<pop(&s)<<endl;//выводим строку исходного выражения и результатcin.get();// задерживает закрытие окна вывода до нажатия Enter}
И, если конечно возможно, блок-схему.
Рисованием квадратиков никогда не увлекался. Подробные блок-схемы уже полвека никому не нужны. Они были полезны только когда программировали в машинных кодах и на Ассемблере. Любой язык программирования высокого уровня гораздо понятнее блок-схем. Если очень надо, скачай программу для их автоматического рисования по коду, например, Autoflowchart
Ссылка на комментарий
Поделиться на другие сайты

И буду ещё раз пресильно благодарен, если поможете с этим!

Написать на С++.

Разработать рекурсивную функцию, которая определяет, помещена ли строка в бинарное дерево поиска.

Тролль просто красавчик!=))

С комментариями, пожалуйста...)

Ссылка на комментарий
Поделиться на другие сайты

SimikВ C++ нет процедур. Кто пишет вам задания?

#include <iostream>using namespace std;int c=0, cm;struct Tree{int info; Tree *right,*left;};struct STACK{int l; Tree *tree; STACK *next;};Tree *root=NULL; STACK *st=NULL;void Push(Tree *tree, int l){STACK *tmp=new STACK; tmp->tree=tree; tmp->l=l; tmp->next=st; st=tmp;}int Pop(Tree **tree){if(st){STACK *tmp=st; st=st->next; *tree=tmp->tree; int l=tmp->l;delete tmp; return l;}else return 0;}void Create(Tree **cur, int n){if(n==0)*cur=NULL; else {int nl=n/2; int nr=n-nl-1; Tree *tmp=new Tree; c++;tmp->info=rand()%100; Create(&tmp->left,nl); Create(&tmp->right,nr); *cur=tmp;}}void Sh(Tree *cur,int l){if(cur){Sh(cur->left,l+1);  for(int i=0;i<l;i++)cout<<"\t";cm=cur->info;cout<<cur->info<<endl; Sh(cur->right, l+1);}}int main(){int n; cout<<"number of edges: "; cin>>n; Create(&root,n);Sh(root,0); cout<<endl<<"the most left edge="<<cm<<endl; cin.get(); cin.get();}

Запрашивается и вводится количество вершин, создается дерево, заполненное случайными числами до 100, затем дерево просматривается и выводится на экран само дерево и значение самого левого листа.

Очень благодарен!

Задания пишут преподаватели. В их правильности не уверен, так как их книги тоже полны ошибок. =)

Ссылка на комментарий
Поделиться на другие сайты

Хм, товарищ Верховный Главнокомандующий Цезарь шифровал свои приказы подстановочным кодом с простым сдвигом букв по кольцу. Ключ шифровки в шифре Цезаря - одно число: сдвиг букв в кольце. Если задавать произвольные подстановки букв, то это будет не шифр Цезаря, а просто подстановочный шифр, так что неясно, зачем печатать алфавит. Но просят - напечатаем... Кстати, сам Цезарь использовал всегда ключ 3, поскольку считал, что варвары и так не догадаются, но у нас по заданию пользователь задает свой.

var s,r:string; c:char; i,k:integer; f:text;beginfor c:='A' to 'Z' do write©; writeln;write('Name of the file? '); readln®; assign(f,r);write('Key(number)? '); readln(k);repeat write('Read® or Write(W)? '); readln©; c:=upcase© until c in['W','R'];if c='W' then begin rewrite(f); write('Text? '); readln(s); for i:=1 to length(s) dobeginc:=upcase(s[i]);if c in['A'..'Z'] then c:=chr((ord©+k-13)mod 26+65);write(f,c)end endelse begin reset(f); while not eof(f) dobeginread(f,c);if c in['A'..'Z'] then c:=chr((ord©-k-13)mod 26+65);write©end; writeln; writeln('Press the key "Enter"'); readln end;close(f);end.

c:=chr((ord©-k-13)mod 26+65); можно тут пояснить, что делается?

Ссылка на комментарий
Поделиться на другие сайты

Riki_Tiki_Tavi

c:=chr((ord©-k-13)mod 26+65);

можно тут пояснить, что делается?

Делается циклический сдвиг буквы по алфавиту на -k. Минус тут потому, что это при расшифровке, когда сдвиг должен производиться в обратном направлении.

Делается сдвиг так: находится код буквы, из него вычитается k и дополнительно 13, чтобы новые коды букв были кратны 26 (количество букв в английском алфавите, их коды начинаются с 65), код приводится нахождением остатка по mod в диапазон 0..25 и к нему добавляется 65, чтобы получить код буквы по таблице ASCII, после чего он преобразуется к символьному типу.

Serty

Разработать рекурсивную функцию, которая определяет, помещена ли строка в бинарное дерево поиска. С комментариями, пожалуйста...)
#include <stdio.h>#include <string.h>// подключили заголовочные файлы используемых библиотекchar p[100]; struct Tree{Tree *L,*R; char S[100];};// объявили типы и переменныеint ct(Tree *w){int m=0; return m+=(strcmp(w->S,p)==0)+(w->L?ct(w->L):0)+(w->R?ct(w->R):0);}// функция рекурсивного просмотра дерева и поиска в нем строки p,//   выдает количество найденных вхожденийvoid al(Tree **w, char *p){Tree* k=*w=new Tree; k->L=k->R=0; strcpy(k->S,p);}// функция создания новой вершины дерева с заданной строкойint main(){printf("in the test tree are strings: a, aa, aaa, aaaa, aaaaa, aaaaaa, aaaaaaa, aaaaaaaa\n");printf("Enter the string for the search: "); gets(p);// ввод строки для поиска в деревеTree *T=0; al(&T,"a"); al(&T->L,"aa"); al(&T->R,"aaa"); al(&T->L->L,"aaaa"); al(&T->L->L->R,"aaaaa"); al(&T->L->L->L,"aaaaaa"); al(&T->R->L,"aaaaaaa"); al(&T->L->R,"aaaaaaaa");// создание дерева с несколькими строками для тестированияprintf("%s",ct(T)?"yes!":"no!");// поиск заданной строки в дереве и печать результатаgetchar();// задержка закрытия окна вывода до нажатия клавиши Enter}
Оффтоп
Тролль просто красавчик!=))
Аватар такой по историческим причинам... Девушки не против - все о'кей :)
Изменено пользователем Тролль
  • Upvote 1
Ссылка на комментарий
Поделиться на другие сайты

NickLidТут не о чем писать. Если с вас требуют комментарии, мог бы написать и сам в стиле "Ввод...", "Вывод..."

#include <iostream>// подключение потоков ввода/выводаusing namespace std;// использование стандартного пространства именstruct Tree{Tree *L,*R;}; int n; Tree *T=0;// объявление  дереваint ct(Tree *w,int l)// подсчет числа вершин в счетчике d рекурсивным спуском {int d=0; if(w->L)d+=ct(w->L,l+1); if(w->R)d+=ct(w->R,l+1); if(n==l)d++; return d;}void al(Tree **w){Tree* k; *w=new Tree; k=*w; k->L=0;k->R=0;}// создание новой вершины дереваint main(){al(&T); al(&T->L); al(&T->R); al(&T->L->L); al(&T->L->L->R); al(&T->L->L->L); al(&T->R->L); al(&T->L->R);// задание тестового дереваcout<<"niveau: "; cin>>n;// ввод уровня дереваcout<<ct(T,0)<<endl;// подсчет количества вершин на заданном уровнеcin.get(); cin.get();// задержка окна вывода до нажатия Enter}

Спасибо огромное, но можете сделать чтобы показывало само дерево, чтобы было наглядно видно сколько вершин) Пожалуйста) Заранее благодарен)

Ссылка на комментарий
Поделиться на другие сайты

Доброго времени суток, прошу помощи.

Помогите выполнить лабораторную, дан метод сортировки - сортировка Шелла. Необходимо сделать программу на зыке С++, в которой можно будет осуществялть сортировку данным способом, при этом числа задаются случайно, в самом начале, мы должны указать количество элементов в массиве, а в конце выдать первоначальный массив, заданный случайно, и отсортированный массив, а так же количество перестановок и сравнений.

Буду благодарен.

Ссылка на комментарий
Поделиться на другие сайты

NickLid

можете сделать чтобы показывало само дерево, чтобы было наглядно видно сколько вершин
Добавим функцию показа дерева sh:
#include <iostream>using namespace std;struct Tree{Tree *L,*R;};int n; Tree *T=0;int ct(Tree *w,int l) {int d=0; if(w->L)d+=ct(w->L,l+1); if(w->R)d+=ct(w->R,l+1); if(n==l)d++; return d;}void sh(Tree *w,int l) {if(w){sh(w->R,l+1); for(int i=0;i<l;i++)cout<<"\t"; cout<<'©'<<endl; sh(w->L,l+1);}}void al(Tree **w){Tree* k; *w=new Tree; k=*w; k->L=0;k->R=0;}int main(){al(&T); al(&T->L); al(&T->R); al(&T->L->L); al(&T->L->L->R); al(&T->L->L->L); al(&T->R->L); al(&T->L->R);sh(T,0); cout<<endl<<"niveau: "; cin>>n; cout<<ct(T,0)<<endl; cin.get(); cin.get();}

sizetooo

Cортировка Шелла- стандартный алгоритм, готовый исходный код на C++ в Интернете найти нетрудно, например, в Вики

Изменено пользователем Тролль
  • Upvote 1
Ссылка на комментарий
Поделиться на другие сайты

Ребят помогите!Задача:4. Подсчитать число вершин на n-ом уровне непустого дерева Т (корень считать вершиной нулевого уровня). реализация С++

Ссылка на комментарий
Поделиться на другие сайты

archangel0804

Просмотри в этой теме текущую и предыдущую страницы. Между прочим, предыдущий перед твоим пост как раз об этом, не говоря уже о тех, что перед ним. И впредь не пренебрегай поиском по форуму...

Изменено пользователем Тролль
Ссылка на комментарий
Поделиться на другие сайты

NickLid Добавим функцию показа дерева sh:

#include <iostream>using namespace std;struct Tree{Tree *L,*R;};int n; Tree *T=0;int ct(Tree *w,int l) {int d=0; if(w->L)d+=ct(w->L,l+1); if(w->R)d+=ct(w->R,l+1); if(n==l)d++; return d;}void sh(Tree *w,int l) {if(w){sh(w->R,l+1); for(int i=0;i<l;i++)cout<<"\t"; cout<<'©'<<endl; sh(w->L,l+1);}}void al(Tree **w){Tree* k; *w=new Tree; k=*w; k->L=0;k->R=0;}int main(){al(&T); al(&T->L); al(&T->R); al(&T->L->L); al(&T->L->L->R); al(&T->L->L->L); al(&T->R->L); al(&T->L->R);sh(T,0); cout<<endl<<"niveau: "; cin>>n; cout<<ct(T,0)<<endl; cin.get(); cin.get();}

Спасибо за ваш труд)))

Когда я попытался сделать чтобы рандомно выдавал мне элементы дерева, во-первых он за место чисел везде ставил й, а во-вторых при нахождении элементов на уровне он всегда показывал только единицу, при этом я убирал тестовое дерево???? Можете убрать тестовое дерево и сделать чтобы кол-во элементов задавалось рандомно) Если можно с комментариями))

Ссылка на комментарий
Поделиться на другие сайты

sizetooo

Cортировка Шелла- стандартный алгоритм, готовый исходный код на C++ в Интернете найти нетрудно, например, в Вики

Несомненно я пытался сделать эту программу сам, используя алгоритм из Вики, но у меня не вышло ничего, не могли бы вы все таки помочь? Я буду очень признателен! К тому же там нужно организовать подсчет перестановок и сравнений, а я ума не приложу каким образом это можно осуществить..

Ссылка на комментарий
Поделиться на другие сайты

Riki_Tiki_Tavi

Делается циклический сдвиг буквы по алфавиту на -k. Минус тут потому, что это при расшифровке, когда сдвиг должен производиться в обратном направлении.

Делается сдвиг так: находится код буквы, из него вычитается k и дополнительно 13, чтобы новые коды букв были кратны 26 (количество букв в английском алфавите, их коды начинаются с 65), код приводится нахождением остатка по mod в диапазон 0..25 и к нему добавляется 65, чтобы получить код буквы по таблице ASCII, после чего он преобразуется к символьному типу.

Serty

#include <stdio.h>#include <string.h>// подключили заголовочные файлы используемых библиотекchar p[100]; struct Tree{Tree *L,*R; char S[100];};// объявили типы и переменныеint ct(Tree *w){int m=0; return m+=(strcmp(w->S,p)==0)+(w->L?ct(w->L):0)+(w->R?ct(w->R):0);}// функция рекурсивного просмотра дерева и поиска в нем строки p,//   выдает количество найденных вхожденийvoid al(Tree **w, char *p){Tree* k=*w=new Tree; k->L=k->R=0; strcpy(k->S,p);}// функция создания новой вершины дерева с заданной строкойint main(){printf("in the test tree are strings: a, aa, aaa, aaaa, aaaaa, aaaaaa, aaaaaaa, aaaaaaaa\n");printf("Enter the string for the search: "); gets(p);// ввод строки для поиска в деревеTree *T=0; al(&T,"a"); al(&T->L,"aa"); al(&T->R,"aaa"); al(&T->L->L,"aaaa"); al(&T->L->L->R,"aaaaa"); al(&T->L->L->L,"aaaaaa"); al(&T->R->L,"aaaaaaa"); al(&T->L->R,"aaaaaaaa");// создание дерева с несколькими строками для тестированияprintf("%s",ct(T)?"yes!":"no!");// поиск заданной строки в дереве и печать результатаgetchar();// задержка закрытия окна вывода до нажатия клавиши Enter}
Оффтоп
Аватар такой по историческим причинам... Девушки не против - все о'кей :)

А можно сразу архив с готовой рабочей программой? (.exe)

Тролль просто молодец!=))

Ссылка на комментарий
Поделиться на другие сайты

Доброго времени суток, помогите реализовать в С++ следующую задачу: Используя рекурсию, определить максимальную глубину не пустого дерева Т, т.е. число ветвей в самом длинном из путей от корня дерева до листьев.

Ссылка на комментарий
Поделиться на другие сайты

Для публикации сообщений создайте учётную запись или авторизуйтесь

Вы должны быть пользователем, чтобы оставить комментарий

Создать учетную запись

Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!

Регистрация нового пользователя

Войти

Уже есть аккаунт? Войти в систему.

Войти
  • Последние посетители   0 пользователей онлайн

    • Ни одного зарегистрированного пользователя не просматривает данную страницу



×
×
  • Создать...