помогите пожалуйста кому не трудно, кому не лень)))
|
|
Арсик | Дата: Понедельник, 26.12.2011, 18:47 | Сообщение # 16 |
Арсик
Ранг: Дошколенок (?)
Группа: Пользователи
|
Сообщений: |
19 |
Награды: |
0 |
Статус: |
Offline |
|
end-вроде поставил на свое место, все еще та же проблемка(((
program Arsik; uses crt; var s:string; i,x,y:integer;
begin clrscr; writeln('Vvedite stroku');
readln(s);
x:=0; y:=0; for i:=1 to length(s) do if s[i]=' ' then begin
if s[1]=s[i-1] then x:=x+1; if s[2]=s[i-2] then y:=y+1 ;
end; writeln('Pervoe i poslednee=' , x); writeln('Vtoroe i predposlednee=' ,y); readln;
end.
26.12.2011
|
|
|
| |
|
alex_edu | Дата: Понедельник, 26.12.2011, 19:09 | Сообщение # 17 |
alex_edu
Ранг: Магистр (?)
Группа: Пользователи
|
Сообщений: |
607 |
Награды: |
7 |
Статус: |
Offline |
|
Кхм.... Прочитай внимательно мои предыдущие сообщения.... Попробуй написть программу выводящую только индексы первых букв каждого слова.
А так. Читаю тебе по русски твой код: Цикл от 1 до конца строки. ----В случае если пробел ---------Если первая буква ВСЕЙ фразы равна символу перед пробелом то.... ---------Если вторая буква ВСЕЙ фразы равна второму символу перед пробелом то....
26.12.2011
|
|
|
| |
|
Арсик | Дата: Понедельник, 26.12.2011, 19:16 | Сообщение # 18 |
Арсик
Ранг: Дошколенок (?)
Группа: Пользователи
|
Сообщений: |
19 |
Награды: |
0 |
Статус: |
Offline |
|
доработайте на Паскале, я так очень хорошо пойму, прост шя не догоняю что-то(((
26.12.2011
|
|
|
| |
|
YuiSe | Дата: Вторник, 27.12.2011, 11:31 | Сообщение # 19 |
YuiSe
Ранг: Школьник (?)
Группа: Пользователи
|
Сообщений: |
80 |
Награды: |
2 |
Статус: |
Offline |
|
таки сравнивать надо только первую последней и вторую с предпоследней или все же как я и понял сначала еще и третью с пред пред последней и так далее....
http://pedsovet.su/forum/32-5177-91566-16-1324910852 это можно сформулировать в виде процедуры, которая анализирует переданное слово и заполняет список совпадений. Code procedure CalcRepeats(s: string; {переданное слово} var Reps: TList {список совпадений или массив} ) var i, L: integer; begin L := length(s); if ( L > 1) then for i := 1 to trunc(L/2 - 1) do if (UpCase(s[i]) = UpCase(s[L-i)) then Reps[i] = Reps[i] + 1 else writeln('trololo'); end;
если нужно ограничиться 2 символами, то вместо trunc(L/2) нужно использовать min(trunc(L/2), 2).
P.S.: и все таки, Арслан, не пытайтесь мыслить кодом - это неправильно, тем более и получается у вас это плохо.
27.12.2011
Сообщение отредактировал YuiSe - Вторник, 27.12.2011, 11:51
|
|
|
| |
|
alex_edu | Дата: Вторник, 27.12.2011, 12:26 | Сообщение # 20 |
alex_edu
Ранг: Магистр (?)
Группа: Пользователи
|
Сообщений: |
607 |
Награды: |
7 |
Статус: |
Offline |
|
Quote (Арсик) доработайте на Паскале, я так очень хорошо пойму, прост шя не догоняю что-то((( Блин, я уж вообще все по полочкам разложил.... Если прочитать все посты. В твоем коде всего то проблема, что не определяешь начало слова, а сравниваешь всегда с началом всей фразы....
Ладно...... Вот тебе 99% твоей задачи: http://ideone.com/3ZTpq
27.12.2011
|
|
|
| |
|
Арсик | Дата: Вторник, 27.12.2011, 14:58 | Сообщение # 21 |
Арсик
Ранг: Дошколенок (?)
Группа: Пользователи
|
Сообщений: |
19 |
Награды: |
0 |
Статус: |
Offline |
|
вот моя версия,простая,но вполне понятливая)))))
program Arsik; uses crt; var s:string; i,x,y,t:integer;
begin clrscr; writeln('Пожалуйста введите строку');
readln(s); t:=1; x:=0; y:=0; s:=s+' '; for i:=1 to length(s) do if (s[i]=' ') then begin
if s[t]=s[i-1] then x:=x+1; if s[t+1]=s[i-2] then y:=y+1; t:=i+1;
end;
writeln('Первый и последний=' , x); writeln('Второй и предпоследний=' ,y); if x>y then writeln ('совпадений первого и последнего слов БОЛЬШЕ'); if y>x then writeln('совпадений второго и предпоследнего слов Больше') else writeln('ОДИНАКОВО'); readln;
end.
27.12.2011
|
|
|
| |
|
alex_edu | Дата: Вторник, 27.12.2011, 15:25 | Сообщение # 22 |
alex_edu
Ранг: Магистр (?)
Группа: Пользователи
|
Сообщений: |
607 |
Награды: |
7 |
Статус: |
Offline |
|
Молодца. Но не все учтено. В фразе: "Кот и пес" y будет равен 1
27.12.2011
Сообщение отредактировал alex_edu - Вторник, 27.12.2011, 15:25
|
|
|
| |
|
YuiSe | Дата: Вторник, 27.12.2011, 15:26 | Сообщение # 23 |
YuiSe
Ранг: Школьник (?)
Группа: Пользователи
|
Сообщений: |
80 |
Награды: |
2 |
Статус: |
Offline |
|
А что случиться, если я введу два пробела подряд? Или слово будет из одного символа? Если x>y, то в конце появиться еще и надпись ОДИНАКОВО
27.12.2011
Сообщение отредактировал YuiSe - Вторник, 27.12.2011, 15:29
|
|
|
| |
|
Арсик | Дата: Вторник, 27.12.2011, 21:03 | Сообщение # 24 |
Арсик
Ранг: Дошколенок (?)
Группа: Пользователи
|
Сообщений: |
19 |
Награды: |
0 |
Статус: |
Offline |
|
ну да.......согласен)))прога не идеально работает
27.12.2011
|
|
|
| |
|
Арсик | Дата: Вторник, 27.12.2011, 21:05 | Сообщение # 25 |
Арсик
Ранг: Дошколенок (?)
Группа: Пользователи
|
Сообщений: |
19 |
Награды: |
0 |
Статус: |
Offline |
|
вот с функцией.....тут вроде вс учтено
program VeryEasy; uses crt;
const letters : set of char = ['A'..'z', 'a'..'z'];
function GetWordsCount(Str: string): integer; var found: boolean; i: integer; r: integer; begin r := 0; i := 1; repeat found := false; while (i <= Length(Str))and(not(Str[ i ] in letters)) do inc(i); while (i <= Length(Str))and(Str[ i ] in letters) do begin found := true; inc(i); end; if found then r := r + 1; until (i >= Length(Str))or(not found); GetWordsCount := r; end;
function GetWordById(Str: string; Id: integer): string; var i, k: integer; r : string; begin r := ''; i := 1; k := 1; repeat GetWordById := ''; while (i <= Length(Str))and(not(Str[ i ] in letters)) do inc(i); while (i <= Length(Str))and(Str[ i ] in letters) do begin if (k = Id) then r := r+Str[ i ]; inc(i); end; inc(k); until (i >= Length(Str))or(k = Id+1); GetWordById := r; end;
var n1, n2, i : integer; text, buf : string;
begin clrscr; readln(text); n1 := 0; n2 := 0; for i := 1 to GetWordsCount(Text) do begin buf := GetWordById(Text, i); if (Length(buf) > 0)and(buf[1] = buf[Length(buf)]) then n1 := n1 + 1; if (Length(buf) > 1)and(buf[2] = buf[Length(buf)-1]) then n2 := n2 + 1; end; if n1 = n2 then writeln('Equally') else if n1 > n2 then writeln('1&N more') else writeln('2&(N-1) more'); readln; end.
27.12.2011
|
|
|
| |
|
alex_edu | Дата: Среда, 28.12.2011, 01:57 | Сообщение # 26 |
alex_edu
Ранг: Магистр (?)
Группа: Пользователи
|
Сообщений: |
607 |
Награды: |
7 |
Статус: |
Offline |
|
В предыдущем коде достаточно было одно условие добавить и все работало бы как положено. Второй код раз работает - пусть работает, но уж больно много там циклов и вычислений.
28.12.2011
Сообщение отредактировал alex_edu - Среда, 28.12.2011, 01:59
|
|
|
| |
|
YuiSe | Дата: Среда, 28.12.2011, 04:50 | Сообщение # 27 |
YuiSe
Ранг: Школьник (?)
Группа: Пользователи
|
Сообщений: |
80 |
Награды: |
2 |
Статус: |
Offline |
|
Арсик, а не расскажите как это работает? А то кэп подсказывает, что этот код писали не вы.
28.12.2011
|
|
|
| |
|
Арсик | Дата: Среда, 28.12.2011, 17:57 | Сообщение # 28 |
Арсик
Ранг: Дошколенок (?)
Группа: Пользователи
|
Сообщений: |
19 |
Награды: |
0 |
Статус: |
Offline |
|
не я писал, объяснить могу) Функция GetWordsCount подсчитывает количество слов в строке (она нужна только для ограничения цикла в основной программе). Функция GetWordById возвращает строку, содержащую слово из строки по ее порядковому номеру в строке. В основном теле программы в цикле по всем словам проверяются первые и последний символ и второй и предпоследний в очередном вытащенном из строки функцией GetWordById слове, при совпадении наращиваются соответствующие счетчики. По окончании цикла идет сравнение счетчиков и выдача на печать результата.
const //Буквы letters : set of char = ['A'..'z', 'a'..'z'];
//Функция считает количество слов в тексте function GetWordsCount(Str: string): integer; var found: boolean; i: integer; r: integer; begin r := 0; i := 1; repeat found := false; while (i <= Length(Str))and(not(Str[ i ] in letters)) do //пропускаем все НЕбуквы inc(i); while (i <= Length(Str))and(Str[ i ] in letters) do begin //началось слово. определяем конец. found := true; inc(i); end; if found then //если слово найдено, то увеличиваем кол-во слов r := r + 1; until (i >= Length(Str))or(not found); //пока есть слова продолжаем GetWordsCount := r; end;
//получение слова по номеру в тексте function GetWordById(Str: string; Id: integer): string; var i, k: integer; r : string; begin r := ''; i := 1; k := 1; repeat GetWordById := ''; while (i <= Length(Str))and(not(Str[ i ] in letters)) do //пропускаем НЕбуквы inc(i); while (i <= Length(Str))and(Str[ i ] in letters) do begin //слово if (k = Id) then //если нужное слово r := r+Str[ i ]; //заполняем переменную inc(i); end; inc(k); until (i >= Length(Str))or(k = Id+1); //найдено - завершаемся GetWordById := r; end;
var n1, n2, i : integer; text, buf : string;
begin readln(text); //текст n1 := 0; n2 := 0; for i := 1 to GetWordsCount(Text) do begin //перебираем все слова buf := GetWordById(Text, i); //берём слово "i" if (Length(buf) > 0)and(buf[1] = buf[Length(buf)]) then //если слово минимум 1 буква и 1 и последняя равны n1 := n1 + 1; if (Length(buf) > 1)and(buf[2] = buf[Length(buf)-1]) then //если слово минимум 3 буквы и 2 и предпоследняя равны n2 := n2 + 1; end; if n1 = n2 then //если поровну writeln('Equally') else if n1 > n2 then //если 1 больше writeln('1&N more') else writeln('2&(N-1) more'); //если 2 больше readln; end
28.12.2011
|
|
|
| |
|
YuiSe | Дата: Четверг, 29.12.2011, 09:28 | Сообщение # 29 |
YuiSe
Ранг: Школьник (?)
Группа: Пользователи
|
Сообщений: |
80 |
Награды: |
2 |
Статус: |
Offline |
|
Арсик, помните мой первый пост? Это про то, что надо отследить, как сам решаешь задачу без применения компьютера? Так вот я сомневаюсь, что решая поставленную задачу, вы бы сначала считали количество слов, а потом находили сотое (а лучше тысячное) слово, снова пробегая по строке сначала и считая сколько вам там уже встретилось. Вы бы, как и предлагал вам alex_edu, находили первое слово, разбирали его, потом искали конец второго, помня конец первого, брали второе и разбирали его и т.д. пока буквы не кончатся. Так что ж вы тогда над компьютером то так измываетесь?
Кстати и приведенная программа работает не совсем правильно. Какой будет результат ее выполнения, если я передам в нее текст "ее", "Ee"?
P.S.: вам действительно нравиться читать неформатированный код?
29.12.2011
|
|
|
| |
|
Арсик | Дата: Четверг, 29.12.2011, 19:00 | Сообщение # 30 |
Арсик
Ранг: Дошколенок (?)
Группа: Пользователи
|
Сообщений: |
19 |
Награды: |
0 |
Статус: |
Offline |
|
я не решал эту задачу, которую с функцией)я эту задачу загуглил)принцип работы хорошо понимаю
29.12.2011
|
|
|
| |
|