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; } |
|