IPB
ЛогинПароль:

> Прочтите прежде чем задавать вопрос!

1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code], либо быть опубликованы на нашем PasteBin в режиме вечного хранения.
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!

4 страниц V < 1 2 3 4 >  
 Ответить  Открыть новую тему 
> Строки в текстовом файле., Помогите найти ошибку пожалуйста.
сообщение
Сообщение #41


Гуру
*****

Группа: Пользователи
Сообщений: 1 117
Пол: Мужской
Реальное имя: Богдан

Репутация: -  11  +


Цитата
просто дело в том,что цикл работал и считал правильно для одной строки....безошибочно...а теперь....

no1.gif
Во-первых, у тебя к разделителям слов относится только пробел, а как же другие знаки пунктуации? Для каждого будешь делать свою проверку?
Во-вторых, в твоей проге не учтено много ситуаций, например какой ответ будет при такой строке:
ааа  ааа

?
Должно выдать 3, но так как между словами 2 пробела, твоя прога даст 2...
А если строка будет состоять только из одного пробела, она вообще вылетит с ошибкой Division by zero, - деление на ноль.

Так что возьми мой код и не мучься. smile.gif

Сообщение отредактировано: Bokul -


--------------------
Лао-Цзы :
Знать много и не выставлять себя знающим есть нравственная высота. Знать мало и выставлять себя знающим есть болезнь. Только понимая эту болезнь, мы можем избавиться от нее.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #42


lehf
**

Группа: Пользователи
Сообщений: 115
Пол: Женский

Репутация: -  4  +


Цитата(Bokul @ 10.12.2006 22:02) *



Так что возьми мой код и не мучься. smile.gif

cray.gif
я не смогу его защитить....
не смогу его описать....
построить блок-схему....
не смогу....
блин.Надо переводиться,короче....
чувствую себя просто бревном.
unsure.gif
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #43


Гуру
*****

Группа: Пользователи
Сообщений: 1 117
Пол: Мужской
Реальное имя: Богдан

Репутация: -  11  +


Почему не сможешь? Спрашивай что не ясно! smile.gif


--------------------
Лао-Цзы :
Знать много и не выставлять себя знающим есть нравственная высота. Знать мало и выставлять себя знающим есть болезнь. Только понимая эту болезнь, мы можем избавиться от нее.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #44


lehf
**

Группа: Пользователи
Сообщений: 115
Пол: Женский

Репутация: -  4  +


не могу я все спрашивать...итак из исправления ошибки получилось написание всей курсовой.... неудобно мне.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #45


Гуру
*****

Группа: Пользователи
Сообщений: 1 117
Пол: Мужской
Реальное имя: Богдан

Репутация: -  11  +


До этой части должно быть все понятно

const
Separators=',.!? ';{перечислим все разделители слов}
{-------------------------------------}
while not eof(ts) do {пока не закончится файл... }
begin
readln(ts,buf); {...читаем его построчно, каждою строку записываем в buf}
s:=0; {количетво букв в строке}
n:=0; {количество слов в строке}
for i:=1 to length(buf) do {с каждым элементом строки buf проделываем действие:}
if pos(buf[i],separators)=0 then {если этот элемент буква (не разделитель)...}
inc(s) {...то увеличиваем их (букв) количество}
else{в противном случае...}
if ((pos(buf[i-1],separators)=0) and ((i-1)<>0)) then {..это разделитель, то (более подробно ниже}
inc(n); {увеличиваем количество слов}

if pos(buf[length(buf)],separators)=0 then {если последний символ не разделитель}
inc(n); {то увеличиваем количество слов}
writeln(tr,s/n:0:2); {запишем результат}
end;


inc(n) равносильно n:=n+1;
Ты знакома с функцией pos(s1,s2)? Она возвращает номер первого вхождения подстроки s1 в строку s2. Если же такой подстроки нету в s2, то она возвращает 0.
А с помощью pos(buf[i],separators)=0 мы проверяем является ли i-ый элемент строки buf не разделителем - если мы не нашли buf[i] в separators, то там его и нету.
else{в противном случае...}
if ((pos(buf[i-1],separators)=0)

Обрати внимание на buf[i-1]! Так мы боремся с ситуацией, когда разделители идут в подряд, в этом случае не надо повышать количество слов.
if ((pos(buf[i-1],separators)=0) and ((i-1)<>0))

((i-1)<>0)) добавили, чтобы эта проверка не делалась для первого элемента.

             
if pos(buf[length(buf)],separators)=0 then {если последний символ не разделитель}
inc(n); {то увеличиваем количество слов}


Последняя проверка нужна чтобы исключить ситуацию, когда последним символом строки является разделитель, если это так то незачем поднимать количество слов - мы его уже подняли в else


--------------------
Лао-Цзы :
Знать много и не выставлять себя знающим есть нравственная высота. Знать мало и выставлять себя знающим есть болезнь. Только понимая эту болезнь, мы можем избавиться от нее.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #46


lehf
**

Группа: Пользователи
Сообщений: 115
Пол: Женский

Репутация: -  4  +


большое тебе спасибо....но боюсь это не по моим мозговым возможностям....я сделаю все,что смогу.тебе большое очень спасибо за то,что отозвался и так помог!
вот только один и последний вопрос....ибо времени все равно уже не будет....либо сдам,либо нет.

Цитата
Separators=',.!? '

почему '' стоит?Я просто с таким вообще не сталкивалась никогда.... unsure.gif

и
Цитата
writeln(tr,s/n:0:2); {запишем результат}

что такое s/n:0:2?
кста,эта прога неверно у меня посчитала.
trunc надо.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #47


Гуру
*****

Группа: Пользователи
Сообщений: 1 117
Пол: Мужской
Реальное имя: Богдан

Репутация: -  11  +


Цитата
почему '' стоит?Я просто с таким вообще не сталкивалась никогда....

Так мы объявляем константу-строку, тоже самое, что и переменная, но ее нельзя изменять. Если констант не учили, то объяви в Var строковую переменную Separators (в принципе можно любое имя, но только потом на всех местах Separators в проге, поставь имя новой переменной), а потом, перед циклом while, присвой ей значение ',.!? '.

Еще!
вместо
writeln(tr,s/n:0:2)

поставь

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


Сообщение отредактировано: Bokul -


--------------------
Лао-Цзы :
Знать много и не выставлять себя знающим есть нравственная высота. Знать мало и выставлять себя знающим есть болезнь. Только понимая эту болезнь, мы можем избавиться от нее.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #48


Гуру
*****

Группа: Пользователи
Сообщений: 1 117
Пол: Мужской
Реальное имя: Богдан

Репутация: -  11  +


Цитата

trunc надо.

trunc - обрежет дробовую часть, а как же тогда быть 2.5, 2.6, 2 - одно и тоже?
Цитата
кста,эта прога неверно у меня посчитала.

Что значит неверно? Ответ был вроде 2.00?
Цитата
что такое s/n:0:2?

Форматированный вывод. Первая цифра отвечает за количество цифр в целой части числа, вторая - дробной, 0 - для любого количества. Попробуй запустить прогу с writeln(tr,s/n) или writeln(tr,s/n:0:5), поймешь разницу...


--------------------
Лао-Цзы :
Знать много и не выставлять себя знающим есть нравственная высота. Знать мало и выставлять себя знающим есть болезнь. Только понимая эту болезнь, мы можем избавиться от нее.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #49


lehf
**

Группа: Пользователи
Сообщений: 115
Пол: Женский

Репутация: -  4  +


просто букв не может быть дробное число...среднее значение количества букв...
в этой строке среднее количество букв в слове равно 2.22
хм... blink.gif
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #50


Гуру
*****

Группа: Пользователи
Сообщений: 1 117
Пол: Мужской
Реальное имя: Богдан

Репутация: -  11  +


Цитата
просто букв не может быть дробное число...среднее значение количества букв...
в этой строке среднее количество букв в слове равно 2.22

Ни черта не понял... blink.gif


--------------------
Лао-Цзы :
Знать много и не выставлять себя знающим есть нравственная высота. Знать мало и выставлять себя знающим есть болезнь. Только понимая эту болезнь, мы можем избавиться от нее.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #51


lehf
**

Группа: Пользователи
Сообщений: 115
Пол: Женский

Репутация: -  4  +


опять я неправа думаю. unsure.gif
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #52


Гость






Цитата(Bokul @ 10.12.2006 22:13) *
Форматированный вывод. Первая цифра отвечает за количество цифр в целой части числа, вторая - дробной
Ни в коем случае: первая показывает, поле какой ширины отдавать на ВСЁ число, а вторая - сколько из этого количества пойдет на представление дробной части...
 К началу страницы 
+ Ответить 
сообщение
Сообщение #53


Гуру
*****

Группа: Пользователи
Сообщений: 1 117
Пол: Мужской
Реальное имя: Богдан

Репутация: -  11  +


Цитата
Ни в коем случае: первая показывает, поле какой ширины отдавать на ВСЁ число, а вторая - сколько из этого количества пойдет на представление дробной части...

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

В чем ты не права? Я не понял, что ты хотела сказать. Просто старайся меньше использовать "..." smile.gif


--------------------
Лао-Цзы :
Знать много и не выставлять себя знающим есть нравственная высота. Знать мало и выставлять себя знающим есть болезнь. Только понимая эту болезнь, мы можем избавиться от нее.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #54


lehf
**

Группа: Пользователи
Сообщений: 115
Пол: Женский

Репутация: -  4  +


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

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


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

Bokul слушай,а ты учебник издать не хочешь? wink.gif

Сообщение отредактировано: Ellsa -
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #55


Гуру
*****

Группа: Пользователи
Сообщений: 1 117
Пол: Мужской
Реальное имя: Богдан

Репутация: -  11  +


Цитата
зачем ((i-1)<>0)) ?

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

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

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

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

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


--------------------
Лао-Цзы :
Знать много и не выставлять себя знающим есть нравственная высота. Знать мало и выставлять себя знающим есть болезнь. Только понимая эту болезнь, мы можем избавиться от нее.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #56


lehf
**

Группа: Пользователи
Сообщений: 115
Пол: Женский

Репутация: -  4  +


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

я правда видела.... unsure.gif
блин,спасибо тебе громадное!А по каким книгам ты это все изучал?или ты по паскалю просто шарил?
Так все хорошо объяснять...почему не ты у меня преподаешь!!!!!! aggressive.gif
я бы весь паскаль выучила.... smile.gif
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #57


Гуру
*****

Группа: Пользователи
Сообщений: 1 117
Пол: Мужской
Реальное имя: Богдан

Репутация: -  11  +


Цитата
А по каким книгам ты это все изучал?или ты по паскалю просто шарил?

Форум этот научил, за что ему спасибо good.gif Потусуешься здесь, сама начнешь понимать yes2.gif . Так что не пропадай... smile.gif


--------------------
Лао-Цзы :
Знать много и не выставлять себя знающим есть нравственная высота. Знать мало и выставлять себя знающим есть болезнь. Только понимая эту болезнь, мы можем избавиться от нее.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #58


lehf
**

Группа: Пользователи
Сообщений: 115
Пол: Женский

Репутация: -  4  +


Цитата
if pos(buf[i],separators)=0 then {если этот элемент буква (не разделитель)...}

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

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

Сообщение отредактировано: Ellsa -
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #59


Гуру
*****

Группа: Пользователи
Сообщений: 1 117
Пол: Мужской
Реальное имя: Богдан

Репутация: -  11  +


Цитата
опознование разделителя и не разделителя выглядят одинаково?

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


--------------------
Лао-Цзы :
Знать много и не выставлять себя знающим есть нравственная высота. Знать мало и выставлять себя знающим есть болезнь. Только понимая эту болезнь, мы можем избавиться от нее.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #60


lehf
**

Группа: Пользователи
Сообщений: 115
Пол: Женский

Репутация: -  4  +


Цитата(Bokul @ 11.12.2006 3:05) *

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


blush.gif неразделитель....
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

4 страниц V < 1 2 3 4 >
 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 





- Текстовая версия 26.10.2021 4:01
500Gb HDD, 6Gb RAM, 2 Cores, 7 EUR в месяц — такие хостинги правда бывают
Связь с администрацией: bu_gen в домене octagram.name