| BabylonKinki 
 Newbie
 | Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору привет! у меня есть небольшая проблема с бинарным методом.Задание - "найти все слова в тексте из символов которых можно составить заданное слово".С последовательным методом я вроде разобрался,да и с бинарным кажется тоже,но есть некоторые недопонимания...Мне нужно вывести отстортированнный массив(в данном случае это быстрая сортировка).Т.е. я понимаю,что бинарный метод работает только с осортирванным массовом,а как его вывести я незнаю..,а точнее я не представляю как это будет выглядить.Короче говоря,подскажите, как вывести отсортированный массив быстрой сортировкой?????
 
 Код:
 | #include "stdafx.h" #include <stdio.h>
 #include <iostream>
 #include <conio.h>
 #include <time.h>
 #include <windows.h>
 using namespace std;
 HANDLE hStdout;
 int xz=0;
 
 void Posl_Poisk(char Text[255],char Slovo[255])
 {
 int i,j,x=0;
 
 for (i=0;i<strlen(Slovo) ;i++)
 {
 x=0;
 for (j=0;j<strlen(Text);j++)
 if (Slovo[i]!=Text[j])
 x++;
 
 if (x==strlen(Text))
 goto lable1;
 }
 printf(" %s\n",Text);
 xz++;
 
 lable1:
 ;
 }
 
 
 int Byst_Sort(char *Text, char C, int Left, int Right)
 {
 int NSep;
 char Sep;
 int j,x=0;
 NSep=(Right-Left)/2+Left;
 Sep=Text[NSep];
 
 if (C==Sep)
 x=1;
 
 else
 {
 if ((C>Sep) && (NSep+1<=Right))
 x=Byst_Sort(Text,C,NSep+1,Right);
 if ((C<Sep)&& (NSep-1>=Left))
 x=Byst_Sort(Text,C,Left,NSep-1);
 }
 return x;
 
 }
 
 void Bin_Poisk(char Text[255],char Slovo[255])
 {
 int i,j,L=0;
 char NewText[255];
 
 for (i=0;i<strlen(Text);i++)
 NewText[i]=Text[i];
 
 for (i=0;i<strlen(Text)-1;i++)
 for (j=i+1;j<strlen(Text);j++)
 if (NewText[i]>NewText[j])
 swap(NewText[i],NewText[j]);
 
 for (i=0;i<strlen(Slovo);i++)
 L+=Byst_Sort(NewText,Slovo[i],0,strlen(Text)-1);
 
 if ((L>strlen(Slovo)) || (L==strlen(Slovo)))
 {
 printf(" %s\n",Text);
 xz++;
 }
 }
 
 int main()
 {
 
 hStdout=GetStdHandle(STD_OUTPUT_HANDLE);
 SetConsoleTextAttribute(hStdout,15);
 
 FILE *InText;
 char Text[255], Slovo[255];
 
 if((InText=fopen("Text.txt","r"))==NULL)
 {
 printf("ne udalos' otkrit'");
 getch ();
 return 0;
 }
 
 //Задание
 printf("zadanie:\n\n");
 SetConsoleTextAttribute(hStdout,11);
 printf(" Nayti vse slova v texte iz simvolov kotorix mojno sostavit' zadannoe slovo.\n");
 
 //Вывод текста
 SetConsoleTextAttribute(hStdout,15);
 printf("\nIsxodniy text: \n\n");
 SetConsoleTextAttribute(hStdout,12);
 while(!feof(InText))
 {
 fscanf(InText, "%s", &Text);
 printf("%s ",Text);
 
 }
 fclose(InText);
 
 //Ввод слова
 SetConsoleTextAttribute(hStdout,15);
 printf("\n\nVvedite slovo\n\n ");
 SetConsoleTextAttribute(hStdout,18);
 scanf("%s",&Slovo);
 
 
 //Последовательный поиск
 SetConsoleTextAttribute(hStdout,9);
 printf("\nPosledovatel'niy sposob : \n\n");
 SetConsoleTextAttribute(hStdout,11);
 InText=fopen("Text.txt","r");
 xz=0;
 while(!feof(InText))
 {
 fscanf(InText, "%s", &Text);
 Posl_Poisk(Text,Slovo);
 }
 fclose(InText);
 if (xz==0)
 printf("Takix slov net\n");
 _getch();
 
 //Бинарный поиск
 printf("\nmassive: \n\n");
 printf("%s", &Text);
 xz=0;
 SetConsoleTextAttribute(hStdout,9);
 printf("\nBinarniy sposob: \n\n");
 SetConsoleTextAttribute(hStdout,11);
 InText=fopen("Text.txt","r");
 xz=0;
 while(!feof(InText))
 {
 fscanf(InText, "%s", &Text);
 Bin_Poisk(Text,Slovo);
 }
 fclose(InText);
 if (xz==0)
 printf(" Net takix slov\n");
 
 _getch();
 return 0;
 }
 
 | 
 |