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

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

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

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


Гуру
*****

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

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


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

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

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

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

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


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


lehf
**

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

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


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



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

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


Гуру
*****

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

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


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


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


lehf
**

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

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


не могу я все спрашивать...итак из исправления ошибки получилось написание всей курсовой.... неудобно мне.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Bokul
сообщение 10.12.2006 22:40
Сообщение #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 
 К началу страницы 
+ Ответить 
Ellsa
сообщение 10.12.2006 22:59
Сообщение #46


lehf
**

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

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


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

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

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

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

что такое s/n:0:2?
кста,эта прога неверно у меня посчитала.
trunc надо.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Bokul
сообщение 10.12.2006 23:01
Сообщение #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 - 10.12.2006 23:01


--------------------
Лао-Цзы :
Знать много и не выставлять себя знающим есть нравственная высота. Знать мало и выставлять себя знающим есть болезнь. Только понимая эту болезнь, мы можем избавиться от нее.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Bokul
сообщение 10.12.2006 23:13
Сообщение #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 
 К началу страницы 
+ Ответить 
Ellsa
сообщение 10.12.2006 23:15
Сообщение #49


lehf
**

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

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


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


Гуру
*****

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

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


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

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


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


lehf
**

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

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


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


Гость






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


Гуру
*****

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

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


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

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

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


--------------------
Лао-Цзы :
Знать много и не выставлять себя знающим есть нравственная высота. Знать мало и выставлять себя знающим есть болезнь. Только понимая эту болезнь, мы можем избавиться от нее.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Ellsa
сообщение 11.12.2006 0:59
Сообщение #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 - 11.12.2006 0:53
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Bokul
сообщение 11.12.2006 1:11
Сообщение #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 
 К началу страницы 
+ Ответить 
Ellsa
сообщение 11.12.2006 1:14
Сообщение #56


lehf
**

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

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


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

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


Гуру
*****

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

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


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

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


--------------------
Лао-Цзы :
Знать много и не выставлять себя знающим есть нравственная высота. Знать мало и выставлять себя знающим есть болезнь. Только понимая эту болезнь, мы можем избавиться от нее.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Ellsa
сообщение 11.12.2006 3:01
Сообщение #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 - 11.12.2006 3:01
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Bokul
сообщение 11.12.2006 3:05
Сообщение #59


Гуру
*****

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

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


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

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


--------------------
Лао-Цзы :
Знать много и не выставлять себя знающим есть нравственная высота. Знать мало и выставлять себя знающим есть болезнь. Только понимая эту болезнь, мы можем избавиться от нее.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Ellsa
сообщение 11.12.2006 3:06
Сообщение #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

 



- Текстовая версия 28.04.2024 9:03
Хостинг предоставлен компанией "Веб Сервис Центр" при поддержке компании "ДокЛаб"