Страница 2 из 3«123»
Модератор форума: Екатерина_Пашкова 
Форум учителей об образовании в России и мире » Форум педагогов по предметам, разделам » Форум учителей информатики » помогите пожалуйста кому не трудно, кому не лень))) (на Паскале))))
помогите пожалуйста кому не трудно, кому не лень)))
АрсикДата: Понедельник, 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.
Спасибо
alex_eduДата: Понедельник, 26.12.2011, 19:09 | Сообщение # 17

Александр Обычный
Ранг: Магистр (?)
Группа: Пользователи
Российская Федерация
Иваново

Сообщений:
606
Награды: 7
Статус: Offline
Кхм.... Прочитай внимательно мои предыдущие сообщения.... Попробуй написть программу выводящую только индексы первых букв каждого слова.

А так. Читаю тебе по русски твой код:
Цикл от 1 до конца строки.
----В случае если пробел
---------Если первая буква ВСЕЙ фразы равна символу перед пробелом то....
---------Если вторая буква ВСЕЙ фразы равна второму символу перед пробелом то....
Спасибо
АрсикДата: Понедельник, 26.12.2011, 19:16 | Сообщение # 18

Арслан Батыршин
Ранг: Дошколенок (?)
Группа: Пользователи
Российская Федерация
Уфа

Сообщений:
19
Награды: 0
Статус: Offline
доработайте на Паскале, я так очень хорошо пойму, прост шя не догоняю что-то(((
Спасибо
YuiSeДата: Вторник, 27.12.2011, 11:31 | Сообщение # 19

Bvz Afvbkbz
Ранг: Школьник (?)
Группа: Пользователи
Гондурас
Nueva Armenia

Сообщений:
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.: и все таки, Арслан, не пытайтесь мыслить кодом - это неправильно, тем более и получается у вас это плохо.


Сообщение отредактировал YuiSe - Вторник, 27.12.2011, 11:51
Спасибо
alex_eduДата: Вторник, 27.12.2011, 12:26 | Сообщение # 20

Александр Обычный
Ранг: Магистр (?)
Группа: Пользователи
Российская Федерация
Иваново

Сообщений:
606
Награды: 7
Статус: Offline
Quote (Арсик)
доработайте на Паскале, я так очень хорошо пойму, прост шя не догоняю что-то(((

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

Ладно...... Вот тебе 99% твоей задачи: http://ideone.com/3ZTpq
Спасибо
АрсикДата: Вторник, 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.
Спасибо
alex_eduДата: Вторник, 27.12.2011, 15:25 | Сообщение # 22

Александр Обычный
Ранг: Магистр (?)
Группа: Пользователи
Российская Федерация
Иваново

Сообщений:
606
Награды: 7
Статус: Offline
Молодца. Но не все учтено. В фразе: "Кот и пес" y будет равен 1

Сообщение отредактировал alex_edu - Вторник, 27.12.2011, 15:25
Спасибо
YuiSeДата: Вторник, 27.12.2011, 15:26 | Сообщение # 23

Bvz Afvbkbz
Ранг: Школьник (?)
Группа: Пользователи
Гондурас
Nueva Armenia

Сообщений:
80
Награды: 2
Статус: Offline
А что случиться, если я введу два пробела подряд? Или слово будет из одного символа?
Если x>y, то в конце появиться еще и надпись ОДИНАКОВО


Сообщение отредактировал YuiSe - Вторник, 27.12.2011, 15:29
Спасибо
АрсикДата: Вторник, 27.12.2011, 21:03 | Сообщение # 24

Арслан Батыршин
Ранг: Дошколенок (?)
Группа: Пользователи
Российская Федерация
Уфа

Сообщений:
19
Награды: 0
Статус: Offline
ну да.......согласен)))прога не идеально работает
Спасибо
АрсикДата: Вторник, 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.
Спасибо
alex_eduДата: Среда, 28.12.2011, 01:57 | Сообщение # 26

Александр Обычный
Ранг: Магистр (?)
Группа: Пользователи
Российская Федерация
Иваново

Сообщений:
606
Награды: 7
Статус: Offline
В предыдущем коде достаточно было одно условие добавить и все работало бы как положено.
Второй код раз работает - пусть работает, но уж больно много там циклов и вычислений.


Сообщение отредактировал alex_edu - Среда, 28.12.2011, 01:59
Спасибо
YuiSeДата: Среда, 28.12.2011, 04:50 | Сообщение # 27

Bvz Afvbkbz
Ранг: Школьник (?)
Группа: Пользователи
Гондурас
Nueva Armenia

Сообщений:
80
Награды: 2
Статус: Offline
Арсик, а не расскажите как это работает? А то кэп подсказывает, что этот код писали не вы.
Спасибо
АрсикДата: Среда, 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
Спасибо
YuiSeДата: Четверг, 29.12.2011, 09:28 | Сообщение # 29

Bvz Afvbkbz
Ранг: Школьник (?)
Группа: Пользователи
Гондурас
Nueva Armenia

Сообщений:
80
Награды: 2
Статус: Offline
Арсик, помните мой первый пост?
Это про то, что надо отследить, как сам решаешь задачу без применения компьютера?
Так вот я сомневаюсь, что решая поставленную задачу, вы бы сначала считали количество слов, а потом находили сотое (а лучше тысячное) слово, снова пробегая по строке сначала и считая сколько вам там уже встретилось. Вы бы, как и предлагал вам alex_edu, находили первое слово, разбирали его, потом искали конец второго, помня конец первого, брали второе и разбирали его и т.д. пока буквы не кончатся. Так что ж вы тогда над компьютером то так измываетесь?

Кстати и приведенная программа работает не совсем правильно. Какой будет результат ее выполнения, если я передам в нее текст "ее", "Ee"?

P.S.: вам действительно нравиться читать неформатированный код?
Спасибо
АрсикДата: Четверг, 29.12.2011, 19:00 | Сообщение # 30

Арслан Батыршин
Ранг: Дошколенок (?)
Группа: Пользователи
Российская Федерация
Уфа

Сообщений:
19
Награды: 0
Статус: Offline
я не решал эту задачу, которую с функцией)я эту задачу загуглил)принцип работы хорошо понимаю
Спасибо
Форум учителей об образовании в России и мире » Форум педагогов по предметам, разделам » Форум учителей информатики » помогите пожалуйста кому не трудно, кому не лень))) (на Паскале))))
Страница 2 из 3«123»
Поиск:



Спорная ситуация с родителями или администрацией? Ищете выход из проблемы на уроке или с учеником?
Не знаете, как что-то сделать на компьютере?


Вы можете задать анонимный вопрос
х
Подробно изложите суть вашего вопроса.
Обратите внимание, что вопросы публикуются в открытом доступе не сайте, поэтому не указывайте персональные данные ваши или иных лиц. Однако стоит указать свой РЕГИОН, т.к. законодательство в разных регионах разное.
Отправить