Tom Kruz Опубликовано 25 декабря, 2004 Жалоба Поделиться Опубликовано 25 декабря, 2004 Очень нужно решить задачу, помогите, кто может Задача: Задача № 18 (170603_4) Вводится текст - последовательность предложений, каждое из которых заканчивается точкой. Последнее предложение заканчивается восклицательным знаком. Другие знаки препинания в тексте опущены. Предложения состоят из слов, между которыми может быть любое число пробелов. Словом назовем последовательность символов, не содержащую пробелов. Разработать АЛГОРИТМ, дать его ОПИСАНИЕ (включая ОБЩУЮ СХЕМУ и назначение используемых переменных), привести ПРОГРАММУ нахождения множества слов, содержащихся одновременно во всех предложениях кроме первого. КОНТРОЛЬНЫЙ ПРИМЕР Исходные данные: Предварительное тестирование проводится перед собеседованием. Предстояло тестирование и абитуриенты готовились настойчиво и рассчитывали что результаты будут хорошие. Тестирование дало неожиданно хорошие для комиссии результаты они основывались на количестве затраченного труда! Решение: Общие слова: результаты хорошие Решить нужно именно в Borland C++Builder 6 Ссылка на комментарий Поделиться на другие сайты Поделиться
kaat Опубликовано 26 декабря, 2004 Жалоба Поделиться Опубликовано 26 декабря, 2004 Если так на вскидку: Считаем количество предложений без первого. Берем слово №1 (это последовательность символов до первого пробела) из предложения №2 и сохраняем его в переменной tepm. Находим конец этого предложения (символ ".") Просматриваем следующее предложение по словам - берем слово и сравниваем с temp. Если совпадают - увеличиваем счетчик. Так до конца текста. Если счетчик=кол-ву предложений -> слово сохраняем. Берем следующее млово из предложения №2 и повторяем снова... Пока на закончатся слова в этом предложении. Просматривать остальные предложения наверно не имеет смысла, т.к. нам нужны слова, содержащиеся во всех. Текст можно вводить в компонент Memo, оттуда считывать по строкам. Ссылка на комментарий Поделиться на другие сайты Поделиться
Tom Kruz Опубликовано 27 декабря, 2004 Автор Жалоба Поделиться Опубликовано 27 декабря, 2004 kaat Спасибо конечно, но это мне мало о чём говорит, мне нужна сама программа... Ссылка на комментарий Поделиться на другие сайты Поделиться
kaat Опубликовано 27 декабря, 2004 Жалоба Поделиться Опубликовано 27 декабря, 2004 мне нужна сама программа... Самый простой способ - сесть и написать :) А если серьезно - то если нужно не завтра, то можно подумать на эту тему :) Весь вопрос во времени (у меня у самой сессия :D). Ссылка на комментарий Поделиться на другие сайты Поделиться
Tom Kruz Опубликовано 29 декабря, 2004 Автор Жалоба Поделиться Опубликовано 29 декабря, 2004 kaat если нужно не завтра, то можно подумать на эту тему Не поверишь, но нужно именно завтра... Вобщем, спасибо за помощь! Постараюсь как-нибудь, что-нибудь сделать сам... Желаю удачно сдать сессию! :( Ссылка на комментарий Поделиться на другие сайты Поделиться
Tom Kruz Опубликовано 30 декабря, 2004 Автор Жалоба Поделиться Опубликовано 30 декабря, 2004 Вобщем я кое-что сделал, с помощью друзей, но программа почему-то не работает, может кто поможет, что здесь не так??? //--------------------------------------------------------------------------- #include <vcl\vcl.h> #pragma hdrstop #include "Unit1.h" //--------------------------------------------------------------------------- #pragma resource "*.dfm" TForm1 *Form1; //--------------------------------------------------------------------------- __fastcall TForm1::TForm1(TComponent* Owner) : TForm(Owner) { } //--------------------------------------------------------------------------- void __fastcall TForm1::Button1Click(TObject *Sender) { //---------переменные------------ AnsiString BeginT; AnsiString Word; AnsiString WordL[100][100]; int WordC[100]; //кол-во слов int PredlC=0;//кол-во предложений AnsiString ResultL[100]; int ResultC; //----------обработка 1--------- BeginT=Memo1->Text; for (int i = 1; i<BeginT.Length()+1; i++) //цикл по количеству символов в строке { if (BeginT==' ') //Если символ - пробел, то { int a=0; for (int k = 1; k<=WordC[PredlC]; k++) //перебирается по количеству слов { if (WordL[PredlC][k]==Word) //и проверяется, есть ли слово в списке { a=1; //если да, то переменная приравнивается к единице }; } ; if (a==1) //если а равна единице, то {} else { WordC[PredlC]++; //количество слов увеличивается на 1 WordL[PredlC][WordC[PredlC]]=Word; //слово записывается в массив слов }; Word=""; //переменная очищается для поиска следующего слова } else //если символ не является пробелом, { if (PredlC==0) PredlC=1; if (BeginT=='.' || BeginT=='!') //то проверяется, является ли символ точкой { //если да, то int a = 0; for (int k = 1; k<WordC[PredlC]+1; k++) //перебирается по количеству слов { if (WordL[PredlC][k]==Word) //и проверяется, есть ли слово в списке { a=1; //если да, то переменная приравнивается к единице }; }; if (a==1) {} //если а равна единице, то else { WordC[PredlC]++; //количество слов увеличивается на 1 WordL[PredlC][WordC[PredlC]]=Word; //слово записывается в массив слов }; Word=""; //переменная очищается для поиска следующего слова if (BeginT!='!') PredlC++; } else //если символ не является точкой, то { Word=Word+BeginT; //символ добавляется в переменную для хранения слов }; }; }; //переход к следующему символу //-------------обработка слов------------ for (int i=2; i<=PredlC; i++) for (int j=1; j<=WordC; j++) { int a=0; Word=WordL[j]; for (int k=2; k<=PredlC; k++) { if (k!=i) for (int v=1; v<=WordC[k]; v++); { if ( Word==WordL[k][v]) a++; } } if (a==PredlC-2) { int b=0; for (int m = 1; m<WordC[PredlC]+1; m++) //перебирается по количеству слов { if (ResultL[m]==Word) //и проверяется, есть ли слово в списке { b=1; //если да, то переменная приравнивается к единице }; }; if (b==1) {} //если а равна единице, то else { ResultC++; //количество слов увеличивается на 1 ResultL[ResultC]=Word; //слово записывается в массив слов }; } } //-------вывод результата--------- Word=""; for (int i=1; i<=ResultC; i++) Word=Word+ResultL+' '; Memo2->Text=Word; } //--------------------------------------------------------------------------- Ссылка на комментарий Поделиться на другие сайты Поделиться
kaat Опубликовано 30 декабря, 2004 Жалоба Поделиться Опубликовано 30 декабря, 2004 В самом начале: int a=0;for (int k = 1; k<=WordC[PredlC]; k++) //перебирается по количеству слов {... у тебя пустой массив WordC. Ты в цикле говоришь - пока k меньше или равно значения из WordC по индексу PredlC. А массив ты не заполнил данными!! Я так понимаю, что WordC[PredlC] - количество слов в предложениях. Судя по всему, ты вводишь текст в Memo, а сам алгоритм поместил в обработчик нажатия кнопки. :) Поэтому ты не знаешь, ни сколько у тебя предложений, ни сколько слов в них. Сначала посчитай их, либо сделай другое условие в цикле, например while(BeginT!=".") { .... } т.е. пока не встретится точка мы будем сравнивать слова. По-моему, основной косяк в этом. Удачи!!! :D З.Ы.: Если будут вопросы - пиши на мыло Ссылка на комментарий Поделиться на другие сайты Поделиться
Tom Kruz Опубликовано 30 декабря, 2004 Автор Жалоба Поделиться Опубликовано 30 декабря, 2004 (изменено) Не знаю, это ещё не смотрел, но так он выдаёт ошибку, что не объявлена переменная 'v' вот в этом месте for (int i=2; i<=PredlC; i++) for (int j=1; j<=WordC; j++) { int a=0; Word=WordL[j]; for (int k=2; k<=PredlC; k++) { if (k!=i) for (int v=1; v<=WordC[k]; v++); { if ( Word==WordL[k][v]) a++; } } if (a==PredlC-2) { int b=0; for (int m = 1; m<WordC[PredlC]+1; m++) //перебирается по количеству слов { if (ResultL[m]==Word) //и проверяется, есть ли слово в списке { b=1; //если да, то переменная приравнивается к единице }; }; if (b==1) {} //если а равна единице, то else { ResultC++; //количество слов увеличивается на 1 ResultL[ResultC]=Word; //слово записывается в массив слов }; } } А ещё конкретней в этом if ( Word==WordL[k][v]) a++; Изменено 30 декабря, 2004 пользователем Tom Kruz Ссылка на комментарий Поделиться на другие сайты Поделиться
Рекомендуемые сообщения
Для публикации сообщений создайте учётную запись или авторизуйтесь
Вы должны быть пользователем, чтобы оставить комментарий
Создать учетную запись
Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!
Регистрация нового пользователяВойти
Уже есть аккаунт? Войти в систему.
Войти