Помощь - Поиск - Пользователи - Календарь
Полная версия: Строки в текстовом файле.
Форум «Всё о Паскале» > Pascal, Object Pascal > Задачи
Страницы: 1, 2
Ellsa
опять я неправа думаю. unsure.gif
Алена
Цитата(Bokul @ 10.12.2006 22:13) *
Форматированный вывод. Первая цифра отвечает за количество цифр в целой части числа, вторая - дробной
Ни в коем случае: первая показывает, поле какой ширины отдавать на ВСЁ число, а вторая - сколько из этого количества пойдет на представление дробной части...
Bokul
Цитата
Ни в коем случае: первая показывает, поле какой ширины отдавать на ВСЁ число, а вторая - сколько из этого количества пойдет на представление дробной части...

Точно..
Цитата
опять я неправа думаю.

В чем ты не права? Я не понял, что ты хотела сказать. Просто старайся меньше использовать "..." smile.gif
Ellsa
Цитата
if ((pos(buf[i-1],separators)=0) and ((i-1)<>0)) then {..это разделитель, то (более подробно ниже}

зачем ((i-1)<>0)) ? unsure.gif


а нет проги,которая бы сделала мне блок - схему,зная прогу?
Обратную я просто видела когда-то в интернете...

Bokul слушай,а ты учебник издать не хочешь? wink.gif
Bokul
Цитата
зачем ((i-1)<>0)) ?

Цикл идет от 1 и до длинны строки.
В следующим коде
(pos(buf[i-1],separators)=0)

как ты думаешь какой символ хранится в buf[i-1] при i=1? Ответ: там хранится длинна строки. Если интересно то ord(buf[0]) тоже самое, что и length(buf). Так вот, было бы не правильно, если бы мы попытались обратится к этому числу, как к символу, и чтобы не делать этой ошибки я и сделал эту проверку. smile.gif

Цитата
а нет проги,которая бы сделала мне блок - схему,зная прогу?

Есть Программа построения блок-схем
Цитата
Обратную я просто видела когда-то в интернете...

Сильно сомневаюсь, просто одну и туже схему можно реализовать многими способами. wink.gif
Ellsa
Цитата
Сильно сомневаюсь, просто одну и туже схему можно реализовать многими способами.

я правда видела.... unsure.gif
блин,спасибо тебе громадное!А по каким книгам ты это все изучал?или ты по паскалю просто шарил?
Так все хорошо объяснять...почему не ты у меня преподаешь!!!!!! aggressive.gif
я бы весь паскаль выучила.... smile.gif
Bokul
Цитата
А по каким книгам ты это все изучал?или ты по паскалю просто шарил?

Форум этот научил, за что ему спасибо good.gif Потусуешься здесь, сама начнешь понимать yes2.gif . Так что не пропадай... smile.gif
Ellsa
Цитата
if pos(buf[i],separators)=0 then {если этот элемент буква (не разделитель)...}

Цитата
if ((pos(buf[i-1],separators)=0) and ((i-1)<>0)) then {..это разделитель,

программа работает,но я не понимаю....опознование разделителя и не разделителя выглядят одинаково? unsure.gif
Bokul
Цитата
опознование разделителя и не разделителя выглядят одинаково?

Конечно нет. Как ты думаешь эта строка определяет разделитель или не разделитель?
pos(buf[i],separators)=0
Ellsa
Цитата(Bokul @ 11.12.2006 3:05) *

Конечно нет. Как ты думаешь эта строка определяет разделитель или не разделитель?
pos(buf[i],separators)=0


blush.gif неразделитель....
Bokul
Цитата
неразделитель...

good.gif good.gif good.gif
Молодец!
Наверно я чуть не понятно написал коментарии.
Вот переписал паскалевский код:

Если i-ый символ строки buf не есть разделитель то
увеличим счетчик количества букв в строке
в другом случае
если (символ перед i-ым элементом строки buf был не разделителем) и (i не является единицей) то
увеличим счетчик количества слов в строке


Может так будет понятнее. smile.gif
Ellsa
так...написано в твоем сообщении,что если i-тый символ-буква,прибавляем ее...
если i-1-ый элемент не буква и не начало строки,то прибавляем слово....так я поняла? unsure.gif
Bokul
Цитата
так...написано в твеом сообщении,что если i-тый символ-буква,прибавляем ее...
если i-1-ый элемент не буква и перед 1-ыи и не начало строки,то прибавляем слово....так я поняла?

good.gif Почти...
Цитата
если i-1-ый элемент не буква

убери не, тогда будет правильно.
У нас есть два множества:
1 разделители
2 не разделители = буквы
=>
Цитата
символ перед i-ым элементом строки buf был не разделителем

можно заменить на
Цитата
символ перед i-ым элементом строки buf был буквой
Ellsa
Цитата
символ перед i-ым элементом строки buf был букой

а почему тогда слово-то прибавляем? blink.gif
Bokul
Мы делаем проверку символа перед i, только чтобы бороться с ситуациями когда несколько разделителей идут в подряд, например
123   1

{три пробела}
Представь что у нас нету этой проверки. Тогда алгоритм упростится до такового:

Если i-ый символ строки buf есть буквой то
увеличим счетчик количества букв в строке
в другом случае
увеличим счетчик количества слов в строке


Пройдись с этим алгоритмом по приведенной строке и ты увидишь необходимость делать эту поверку.
Ellsa
черт!Я поняла! lol.gif
неужели в самом деле. lol.gif

решила вставить процедуру....
program kyrs;
const
Iscl=',.!?:;- ';
var f1,f2:text;
kolb,kolc,i:byte;
str,SourceFile,ResultFile:string;
procedure schet_slov (var kolc:byte;var str:string);
var i:byte;
begin
if ((pos(str[i-1],Iscl)=0) and ((i-1)<>0)) then
inc(kolc);
if pos(str[length(str)],Iscl)=0 then
inc(kolc);
end;
begin
writeln('‚ўҐ¤ЁвҐ Ё¬п д ©« -Ёбв®з­ЁЄ ');
readln(SourceFile);
assign(f1,SourceFile);
{$I-}
reset(f1);
{$I+}
if IoResult<>0 then
begin
writeln('ЋиЁЎЄ  ў Ё¬Ґ­Ё д ©« ');
readln;
exit;
end;
writeln('‚ўҐ¤ЁвҐ Ё¬п д ©« -१г«мв в ');
readln(ResultFile);
assign(f2,ResultFile);
{$I-}
rewrite(f2);
{$I+}
if IoResult<>0 then
begin
writeln('ЋиЁЎЄ  ў Ё¬Ґ­Ё д ©« ');
readln;
exit;
end;
while not eof(f1) do
begin
readln(f1,str);
kolb:=0;
kolc:=0;
for i:=1 to length(str) do
if pos(str[i],Iscl)=0 then
inc(kolb)
else
schet_slov(kolc,str);
writeln(f2,kolb/kolc);
end;
close(f1);
close(f2);
end.

считает неверно. unsure.gif


а меня не забанят за такую "активность"? unsure.gif
Bokul
              
kolb:=0;
kolc:=0;
for i:=1 to length(str) do
if pos(str[i],Iscl)=0 then
inc(kolb)
else
schet_slov(kolc,str);


Ты должна сделать процедуру с всего этого. Посмотри на мой процедурный вариант этой проги, там так и есть.
 writeln(f2,kolb/kolc);

Вместо этой строки поставь то, что написано здесь: Строки в текстовом файле.
Естественно изменив соответствующие переменные.
Цитата
а меня не забанят за такую "активность"?

За желание знать тут не банят. smile.gif
Ellsa
give_rose.gif blush.gif applause.gif respect.gif respect2.gif rolleyes.gif tease.gif
блок-схемки теперь мне нарисовать только....=)
но знаки эти я все равно не ставила в ответе. blum.gif
ты уж извини. blush.gif
Bokul
good.gif
Цитата
но знаки эти я все равно не ставила в ответе.

Знаки (форматированный вывод) не главное, главное - эта проверка количества слов на 0

if n<>0 then
writeln(tr,s/n)
else
writeln(tr,0);


Без проверки прога вылетит с ошибкой Division by zero в случае, когда n=0.
Ellsa
Цитата(Bokul @ 11.12.2006 4:19) *

good.gif

Знаки (форматированный вывод) не главное, главное - эта проверка количества слов на 0

if n<>0 then
writeln(tr,s/n)
else
writeln(tr,0);


Без проверки прога вылетит с ошибкой Division by zero в случае, когда n=0.

никогда еще в жизни не встречалась с такой отзывчивостью.Спасибо. rolleyes.gif
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.