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

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


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

sizetooo

сортировка Шелла. в самом начале, мы должны указать количество элементов в массиве, а в конце выдать первоначальный массив, заданный случайно, и отсортированный массив, а так же количество перестановок и сравнений.
//Shellsort (Shell, Schildt, Ciura)#include<stdio.h>#include<stdlib.h>#include<time.h>int p=0, s=0;void shell(int *it, int ct){int i,j,g,k; int x,a[9]={1750,701,301,132,57,23,10,4,1};for(k=0;k<9;k++){ g=a[k]; for(i=g;i<ct;++i){ x=it[i]; for(j=i-g; s+=2,x<it[j]&&j>=0; j-=g)it[j+g]=it[j]; it[j+g]=x; p++;}}}int main(){int i,n,m[1000]; printf("n? "); scanf("%d",&n);for(i=0;i<n;i++)m[i]=rand()%1000;for(int i=0;i<n;i++)printf("%4d",m[i]); printf("\n");shell(m,n);for(int i=0;i<n;i++)printf("%4d",m[i]); printf("\n");printf("s=%5d\n",s); printf("p=%5d\n",p); getchar(); getchar();}

Сделано по реализации Шилдта по ссылке из прежнего сообщения с выбором границ сортируемых сегментов по Циуре (статья по сортировке Шелла в Википедии).

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

NickLid

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

Используя рекурсию, определить максимальную глубину не пустого дерева Т, т.е. число ветвей в самом длинном из путей от корня дерева до листьев.
#include <iostream>using namespace std;struct Tree{Tree *L,*R;}; Tree *T=0;int ct(Tree *w) {int k=0,m=0,d=0; if(w->L)k=ct(w->L); if(w->R)m=ct(w->R); if(d<k)d=k; if(d<m)d=m; 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<<"Depth="<<ct(T)-1<<endl; cin.get();}
Изменено пользователем Тролль
Ссылка на комментарий
Поделиться на другие сайты

Сделано по реализации Шилдта по ссылке из прежнего сообщения с выбором границ сортируемых сегментов по Циуре (статья по сортировке Шелла в Википедии).

Cпасибо, Тролль, я с выбором границ ознакомлен, большое спасибо, все отлично работает :)))

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

NickLid

Не слишком ясно. Без тестового дерева для проверки не обойтись. Если я все же правильно понял мысль, проще всего сделать несколько разных тестовых деревьев и случайный выбор из них.

Я имел в виду то что как вы сделали Simik, т.е. чтобы задавалось рандомное дерево, я выбирал уровень этого дерева и мне показывало сколько там элементов(только число), ну короче все то что вы и сделали, только за место тестового дерева, надо обычное рандомное дерево и чтобы было наглядно. И можно вместе с комментариями)))

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

Я имел в виду то что как вы сделали Simik, т.е. чтобы задавалось рандомное дерево, я выбирал уровень этого дерева и мне показывало сколько там элементов(только число), ну короче все то что вы и сделали, только за место тестового дерева, надо обычное рандомное дерево и чтобы было наглядно. И можно вместе с комментариями)))

NickLid в нашем случае конкретного примера не надо...так как в задании сказано посчитать кол-во элементов на N-ОМ уровне и не важно что там написано (уровень или конкретные числа)а "й"это уровень замени в 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 sh(Tree *w,int l)

{if(w){sh(w->R,l+1); for(int i=0;i<l;i++)cout<<"\t"; cout<<l<<'©'<<endl; sh(w->L,l+1);}}

и все сразу ясно...

Тролль спасибо за помощь

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

#include <iostream>using namespace std;struct Tree{Tree *L,*R;}; Tree *T=0;int ct(Tree *w) {int k=0,m=0,d=0; if(w->L)k=ct(w->L); if(w->R)m=ct(w->R); if(d<k)d=k; if(d<m)d=m; 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<<"Depth="<<ct(T)-1<<endl; cin.get();}

Огромное спасибо!

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

snapback.pngТролль (30 Апрель 2012 - 00:28) писал:

#include <iostream>

using namespace std;

struct Tree{Tree *L,*R;}; Tree *T=0;

int ct(Tree *w)

{int k=0,m=0,d=0; if(w->L)k=ct(w->L); if(w->R)m=ct(w->R); if(d<k)d=k; if(d<m)d=m; 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<<"Depth="<<ct(T)-1<<endl; cin.get();}

Огромное спасибо!

Напишите комментарии к коду, если вас это не затруднит

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

NickLid

ну короче все то что вы и сделали, только за место тестового дерева, надо обычное рандомное дерево и чтобы было наглядно. И можно вместе с комментариями)))
Вообще-то в задании о случайных деревьях не было ни слова. Да и "обычных рандомных деревьев" нет - кому нужны случайные деревья, в отличие от случайных чисел... Но сделать, естественно, можно:
#include <iostream>#include<stdlib.h>#include<time.h>using namespace std;struct Node{int key; Node *L,*R; int m;}; int n;void sh(Node *w,int k){if(w){sh(w->R,k+1); for(int i=0;i<k;i++)cout<<"\t"; cout<<'©'<<endl; sh(w->L,k+1);}}int ct(Node *w,int k){int d=0; if(w->L)d+=ct(w->L,k+1); if(w->R)d+=ct(w->R,k+1); if(n==k)d++; return d;}void add(Node* &t, int k){if(!t){t=new Node; t->L=0; t->R=0; t->m=k;}else{if(k>=t->m)add(t->R,k); if(k<t->m)add(t->L,k);}}int main(){Node *t=0; srand(time(NULL));cout<<"Enter the number of nodes: "; cin>>n; for(int i=0;i<n;i++)add(t,rand()%1000); cout<<endl; sh(t,0);cout<<endl; cout<<endl<<"niveau: "; cin>>n; cout<<ct(t,0)<<endl; getchar(); getchar();}

Комментарии возьми из старой программы. Тут добавилась только функция add вставки в дерево новой ветви, со случайным параметром она и ветвь вставляет случайную :)

Sain

Напишите комментарии к коду, если вас это не затруднит
Ну сколько можно писать одни и те же комментарии? Возьми их из старой программы для NickLid, только функция ct у тебя дает не количество элементов на уровне, а глубину дерева. Изменено пользователем Тролль
Ссылка на комментарий
Поделиться на другие сайты

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

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

archangel1804

То же самое, только в узле не два адреса ветвей *L,*R, а больше, скажем, *N1,*N2,*N3,*N4,*N5 - если максимально может быть пять узлов (квинарное дерево). И проверять не две исходящие ветви, а все возможные пять... Точно так же, как две.

Вообще простейший путь - если заранее неизвестно, сколько может быть ветвей, создаем заготовку узла дерева с запасом, как поступаем обычно и с массивом - если заранее неизвестно, сколько в нем элементов, тогда просто берем размер массива с запасом. Если ветвей может быть много, вместо простых переменных-указателей *N1,*N2,*N3,*N4,*N5 можно сделать их массив и перебирать ветви в цикле - так текст программы будет короче. Для большей общности можно вместо массива сделать список или массив сделать динамическим (для такого дела в C++ есть специальный шаблон vector), тогда вообще границы числу исходящих из узла ветвей не будет. Можно даже вместо списка сделать в каждом узле дерева внутреннее бинарное дерево указателей для ветвей ;) Но усложнять можно бесконечно. А обычно любое дерево еще при построении делают бинарным - любое дерево можно преобразовать в бинарное :)

Вообще в C++ есть стандартная библиотека STL, в которой сложные структуры данных уже реализованы наиболее универсальным образом людьми с высокой квалификацией, остается ими только пользоваться. Например, для дерева есть шаблон set.

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

Шёпот

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

Спасибо огромное! Листинг зачли, осталось теперь сдать в готовом виде (экзешник).

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

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

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

type FR =file of real;

За один просмотр файла f типа FR и без использования дополнительных файлов напечатать элементы файла f в следующем порядке сначала - все числа, меньшие а, затем -все числа из отрезка [a,b], и наконец - все остальные числа, сохраняя исходный взаимный порядок в каждой из этих трех групп чисел (a и b- заданные числа, a<b) .

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

Всем привет!Вот код на шифр Виженера(Pascal)

У кого есть дешифр?

program job3_Vishiner;

uses crt;

var

a,b,c,d:string;

i,j,k,t,q:integer;

begin

t:=1;

writeln('Enter text for coding');

readln(a);

writeln('Enter code-word');

readln(d);

q:=length(d);

c:='';

b:='abcdefghijklmnopqrstuvwxyz';

for i:=1 to length(a) do

for j:=1 to length(b) do

begin

if a=b[j] then

begin

if t>length(d) then

t:=1;

for k:=1 to length(b) do

begin

if d[t]=b[k] then

q:=j+k-1;

if q>26 then

q:=q-26;

end;

c:=c+b[q];

t:=t+1;

end;

end;

writeln©;

readkey;

end.

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

Riki_Tiki_Tavi

Используй кнопку вставки кода. При обычной вставке код искажается, например, у тебя получилось writeln©;, отступы тоже пропали... В первом же посте темы указано: "Если вы вставляете код программы то используйте тег code. Сообщения c листингом и без данного тега будут удаляться, а автору - предупреждение."

У кого есть дешифр?
У Яндекса или Гугля :) Не пренебрегай ими. Например, тут.
  • Upvote 1
Ссылка на комментарий
Поделиться на другие сайты

привет! можете помочь с прогой, совсем мозгов не хватает сделать :verysad:

Написать программу — простейший ftp-клиент. Программа должна опрашивать все узлы указанной сети и сообщать о наличии в ней ftp-серверов с публичным доступом.

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

Доброго времени суток.

Помогите пожалуйста сделать такую ​​программу на С + +.

Дана строка, содержащая бинарные выражения со скобками. написать программу, которая создает бинарное дерево, при проходе по которому различными способами образуется префиксный суфиксний инфиксний выражения.

Непойму как это можно сделать. Вот код по деревьям.

#include <iostream>#include <cstdlib>#include <conio.h>using namespace std;class BinarySearchTree{   private:    struct tree_node{	   tree_node* left;	   tree_node* right;	   char data;    };    tree_node* root;   public:    BinarySearchTree(){	   root = NULL;    }	      bool isEmpty() const { return root == NULL; }    void print_inorder();    void inorder(tree_node*);    void print_preorder();    void preorder(tree_node*);    void print_postorder();    void postorder(tree_node*);    void search(char);    void insert(char);};void BinarySearchTree::insert(char d){   tree_node* t = new tree_node;   tree_node* parent;   t->data = d;   t->left = NULL;   t->right = NULL;   parent = NULL;      if(isEmpty()) root = t;   else{    tree_node* curr;    curr = root;    while(curr){	    parent = curr;	    if(t->data > curr->data)		   curr = curr->right;	    else		   curr = curr->left;    }    if(t->data < parent->data)	   parent->left = t;    else	   parent->right = t;   }}void BinarySearchTree::search(char d){   bool found = false;   if(isEmpty()){    cout << "This Tree is empty!" << endl;    return;   }      tree_node* curr;   tree_node* parent;   curr = root;   int count(0);   while(curr != NULL){	 if(curr->data == d){	    found = true;	    cout << count+1;	    break;	 }	 else{		 count++;		 parent = curr;		 if(d > curr->data)		    curr = curr->right;		 else		    curr = curr->left;	 }   }   if(!found){    cout << "NO" << endl;    return;   }}void BinarySearchTree::print_inorder(){ inorder(root);}void BinarySearchTree::inorder(tree_node* p){   if(p != NULL)   {    if(p->left)	    inorder(p->left);    cout << " " << p->data << " ";    if(p->right)	    inorder(p->right);   }   else return;}void BinarySearchTree::print_preorder(){   preorder(root);}void BinarySearchTree::preorder(tree_node* p){   if(p != NULL)   {    cout << " " << p->data << " ";    if(p->left)	    preorder(p->left);    if(p->right)	    preorder(p->right);   }   else return;}void BinarySearchTree::print_postorder(){   postorder(root);}void BinarySearchTree::postorder(tree_node* p){   if(p != NULL)   {    if(p->left)	    postorder(p->left);    if(p->right)	    postorder(p->right);    cout << " " << p->data << " ";   }   else return;}int main(){   BinarySearchTree b;   char ch;   srand(time(0));   for (int i = 0; i < 10; i++){    b.insert(char(rand()% 25 +97));   }   b.print_inorder();   cout << endl;   b.print_preorder();   cout << endl;   b.print_postorder();   cout << endl;   char a;   cout << "Vvedit znachennia, jake treba znaiti:\n";   cin >> a;   b.search(a);   getch();}
Ссылка на комментарий
Поделиться на другие сайты

motomen

Такая работа - это приличный курсовик. Так что полезно заглянуть сначала в Гугл или Яндекс. Авось что-нибудь и найдется. Например, курсовик по похожему заданию, только формулы не бинарной алгебры, а обычной - тут.

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

С Днем Победы! Всех с 9 МАЯ!!!

Помогите пожалуйста!

Тема задания - файлы. На С++.

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

Желательно с комментариями к программе!

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

помогите пожайлусто переделать кодс С++ под С;

#include<iostream>using namespace std;float number();float factor();float expr();int main(void){   float r;   cout << "Enter number:";   r = expr();   cout << endl << "Resault = " << r;}float number(){   int res = 0;   char c;   while(true)   {    char c = cin.get();    if(c >= '0' && c <= '9')    res = res * 10 + c - '0';    else    {	    cin.putback©;	    break;    }   }return res;}float factor(){   float x;   char c = cin.get();   if(c == '(')   {	   x = expr();	   cin.get();   }   else   {	   cin.putback©;	   x = number();   }   c = cin.get();   switch©   {    case '*':	    return x * factor();    case '/':	    return x / factor();    default:	    cin.putback©;return x;   }}float expr(){   float x = factor();   char c = cin.get();   switch©   {    case '+':	    return x + expr();    case '-':	    return x - expr();    default:	    cin.putback©;return x;   }}
Ссылка на комментарий
Поделиться на другие сайты

vampir4eg

#include<stdio.h>float number();float factor();float expr();int main(){puts("Enter number:"); printf("Resault = %f",expr()); getchar(); getchar();}float number(){int res=0; char c;while(1){c=getchar(); if(c>='0'&&c<='9')res=res*10+c-'0'; else{ungetc(c,stdin); break;}}return res;}float factor(){float x; char c=getchar();if(c=='('){x=expr(); getchar();} else{ungetc(c,stdin); x=number();}c=getchar();switch©{   case '*':return x*factor();   case '/':return x/factor();   default:ungetc(c,stdin); return x;}}float expr(){float x=factor();  char c=getchar();switch©{   case '+':return x+expr();   case '-':return x-expr();   default: ungetc(c,stdin); return x;}}
Ссылка на комментарий
Поделиться на другие сайты

NickLid

Программа работы конференции с разбивкой докладов по секциям. Количество секций и докладов в каждой секции задать самостоятельно. Составить модуль формирования нового списка, содержащего доклады с несколькими авторами.
#include<stdio.h>#include<stdlib.h>#define S 5  // max number of sections#define D 20 // max number of reports#define A 30 // max number of authors#define L 50 // max length ot the name of author plus 1#define M 2  // min number of authorsstruct _se{char sect[A], doc[D][A][L];};#include "input.cpp" //input#include "dataprint.cpp" // output#include "datared.cpp"	// data with one author reports deleteint main(){_se a[s];   for(int i=0; i<S;i++){a[i].sect[0]=0;  for(int j=0;j<D;j++)for(int k=0;k<A;k++){a[i].doc[j][k][0]=0;}}input(a);puts("Data all reports:");dataprint(a);// write the fileFILE* f1=fopen("file1","wb");fwrite((char*)&a,sizeof(a),1,f1);fclose(f1);// read the fileFILE* f2=fopen("file1","rb");fread((char*)&a,sizeof(a),1,f2);fclose(f2);datared(a);// write the fileFILE* f3=fopen("file2","wb");fwrite((char*)&a,sizeof(a),1,f3);fclose(f3);// read the fileFILE* f4=fopen("file2","rb");fread((char*)&a,sizeof(a),1,f4);fclose(f4);puts("Data ohne reports with only one author:");dataprint(a);getchar(); return 0;}

Файл "input.cpp"

void input(_se a[s]){ // inputputs("End of input of category - only Enter in place of the string");for(int i=0; i<S;i++){   puts("Section: "); gets(a[i].sect); if(!a[i].sect[0])break;   for(int j=0;j<D;j++){    puts("Report:  "); gets(a[i].doc[j][0]); if(!a[i].doc[j][0][0])break;    for(int k=1;k<A;k++){		 puts("Author:  "); gets(a[i].doc[j][k]); if(!a[i].doc[j][k][0])break;}}}puts("\n");}

Файл "dataprint.cpp"

void dataprint(_se a[s]){// data printfor(int i=0; i<S; i++){   if(!a[i].sect[0])continue;   else {puts("Section");puts(a[i].sect);}   for(int j=0;j<D;j++){    if(!a[i].doc[j][0][0])continue;    else {puts("Report"); puts(a[i].doc[j][0]); puts("Authors");}    for(int k=1;k<A;k++)		 if(!a[i].doc[j][k][0])continue;		 else puts(a[i].doc[j][k]);}}puts("\n");}

Файл "datared.cpp"

void datared(_se a[s]){// data with one author reports deleteint bs,bd[D];for(int i=0; i<S; i++){bs=0; for(int j=0;j<D;j++)bd[j]=0;if(!a[i].sect[0])continue;   for(int j=0;j<D; j++){    if(!a[i].doc[j][0][0])continue;    for(int k=1;k<A; k++)		 if(!a[i].doc[j][k][0])continue;		 else bd[j]++;}for(int j=0;j<D;j++)if(bd[j]>=M)bs++;if(!a[i].sect[0]||!bs){a[i].sect[0]=0; continue;}   for(int j=0;j<D;j++){    if(!a[i].doc[j][0][0]||bd[j]<M){a[i].doc[j][0][0]=0; break;}}}puts("\n");}

Для простоты все написано в рамках чистого С, за исключением объявления параметров циклов в заголовках циклов и void типа функций.

Программа запрашивает ввод данных в повторяющейся последовательности секция, доклады, авторы, в каждой категории запросы на ввод новых данных этой же категории прекращаются при вводе пустого названия, то есть нажатия просто Enter.

Затем введенные данные записываются в файл file1, он снова считывается и данные выводятся для контроля на экран, затем из данных исключаются доклады с двумя и более авторами, откорректированные данные записываются в файл file2 и для контроля снова считываются и выводятся на экран.

Модули в такой программе не слишком нужны, но раз просят, выделил, кроме основного, три модуля, реализующих ввод данных, их коррекцию и вывод на экран.

Максимальное число вводимых данных задается константами (5 секций по 20 докладов с максимально 29 авторами каждый. Комментарии только общие - что делает каждый кусок программы. Если что-то непонятно, спрашивай.

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

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

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

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

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

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

Войти

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

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

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



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