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

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

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

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


lehf
**

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

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


Здравствуйте всем!Пожалуйста,помогите мне немного...у меня курсач звучит так:
разработать программу анализа текстового файла:определение средней длины слова в каждой строке и формирование файла средних длин построчно.Предусмотреть проверку существования файла и файла частот с выдачей диагностических сообщений.

я решила сначала составить программу для одной строки.

Код
program dddd;
var str:string;
kol,k,i,n,c,sred:real;
begin
readln(str);
n:=length (str);
i:=1;
kol:=0;
while i<=n do
begin
k:=0;
repeat
k:=k+1;
i:=i+1;
until (str[i]=' ') or (i>n);
kol:=kol+k;
i:=i+1;
end;
writeln(kol);

for i:=1 to n do
if (str[i]=' ') then c:=c+1;
if (str[1]=' ') then c:=c-1;
if str[n]=' ' then c:=c-1;
writeln(c+1);
sred:=kol/(c+1);
end.


но он выдает ошибку на until (str[i]=' ') or (i>n);,а именно на квадратной скобке tupe mismatch пишет.
Просто когда я не начинала считать среднее значение-программа шла и все верно считала.А теперь перестала.Я не могу понять,что ему не нравится. unsure.gif

и еще вопросик...не подскажите,что значит:Предусмотреть проверку существования файла и файла частот с выдачей диагностических сообщений?Проверку существования файла проверяют функцией IOResult?
А файл частот-это что такое?
Спасибо заранее.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #2


Гость






Цитата
Я не могу понять,что ему не нравится.
А не нравится ему то, что I описывается, как Real, а по правилам, индексация может производиться только перечислимыми (целые/символьные/пользовательские) типами, но никак не вещественными ...
 К началу страницы 
+ Ответить 
сообщение
Сообщение #3


lehf
**

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

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


Цитата(Алена @ 9.12.2006 17:48) *

А не нравится ему то, что I описывается, как Real, а по правилам, индексация может производиться только перечислимыми (целые/символьные/пользовательские) типами, но никак не вещественными ...

спасибо большое!Действительно так.А можно еще один вопрос...я вот не могу понять....как по строкам идти?То есть завести цикл до окончания файла,а потом надо идти построчно....как перейти от строки к строке...можете подсказать?Пожалуйста.... unsure.gif
и насчет частотного файла...я извиняюсь,что много прошу так... unsure.gif мне правда неудобно... blush.gif

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


lehf
**

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

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


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


просто человек
******

Группа: Пользователи
Сообщений: 3 641
Пол: Женский
Реальное имя: Юлия

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


со строками все просто:
если ты сделаешь
readln(f,s);
readln(f,s);

у тебя считается сначала первая, а потом вторая строка, то есть переход осуществляется автоматически.

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


--------------------
Все содержимое данного сообщения (кроме цитат) является моим личным скромным мнением и на статус истины в высшей инстанции не претендует.
На вопросы по программированию, физике, математике и т.д. в аське и личке не отвечаю. Даже "один-единственный раз" в виде исключения!
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #6


lehf
**

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

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


да нет,так написано почти у всех,у кого курсовик на файлы....
я вот по строкам пытаюсь перейти...но столкнулась с проблемой открытия файла....это я сейчас поищу на форуме...но меня интересует еще одна проблема...мне надо знать количество строк,чтоб потом сделать массив из средних длин слова,который будет иметь столько составляющих,сколько строк в файле...но когда я пишу что sred=array[1..n] of real;
и вычисляю n в программе самой,то он пишет,что он его не знает....я понимаю,что в тот момент,когда я описываю массив в разделе описаний он действительно не знает n...но я не знаю как написать по-другому....
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #7


lehf
**

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

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


нет,не знаю я как избавится от ошибки 104...в поиске ничего не нашла. unsure.gif
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #8


просто человек
******

Группа: Пользователи
Сообщений: 3 641
Пол: Женский
Реальное имя: Юлия

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


а зачем тебе массив, собственно?
пиши сразу в результирующий файл.


--------------------
Все содержимое данного сообщения (кроме цитат) является моим личным скромным мнением и на статус истины в высшей инстанции не претендует.
На вопросы по программированию, физике, математике и т.д. в аське и личке не отвечаю. Даже "один-единственный раз" в виде исключения!
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #9


lehf
**

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

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


Цитата(мисс_граффити @ 9.12.2006 20:25) *

а зачем тебе массив, собственно?
пиши сразу в результирующий файл.

хм...наверно это возможно,да....попробую....спасибо.
Только я все-таки не понимаю...что такое ошибка 104.... unsure.gif

я может плохо умею пользоваться поиском....но у меня пока никаких мыслей на ее исправление..... sad.gif

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


lehf
**

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

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


что-то я еще больше во всем этом запуталась....
wacko.gif
не буду я делать проверку на существование исходного файла частот...но хоть прогу сделать бы...ведь еще блок-схему потом рисовать....
unsure.gif
скажите,пожалуйста,может я не тем методом каким-нибудь решаю?
Может надо другой подход?
Что-то ничерта не идет ничего....
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #11


Гуру
*****

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

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


С каждым своим сообщением ты все больше запутываешь задачу, опиши, где возникли проблемы и выложи исходник, тогда поговорим smile.gif .


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


lehf
**

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

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


я пока вот на этом остановилась:
program ddd;
var str1,str2,imya1,imya2:string;
f1,f2:text;
kol,k,i,n:integer;
sred,c:integer;
begin
writeln('vvedite imya fajla:');
readln(imya1);
{$I-} reset(f1){$I+};
if IOResult<>0 then writeln('owibka v imeni fajla');
assign(f2,'imya2.txt');
rewrite(f2);
while not(eof(f1)) do
begin
readln(f1,str1);
begin
n:=length(str1);
i:=1;
kol:=0;
while i<=n do
begin
k:=0;
repeat k:=k+1;
i:=i+1;
until (str1[i]=' ') or (i>n);
kol:=kol+k;
i:=i+1;
end;
writeln(kol);
for i:=1 to n do
if (str1[i]=' ') then c:=c+1;
if (str1[1]=' ') then c:=c-1;
if (str1[n]=' ') then c:=c-1;
writeln(c+1);
sred:=trunc(kol/(c+1));
write(f2,sred);
close(f1);
close(f2);
end;
end;
end.



не открывает файл...f1....я уже сама не пойму,чего от меня хотят.... wacko.gif
а ты не знаешь что такое частотный файл? unsure.gif

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


Гуру
*****

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

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


Цитата
а ты не знаешь что такое частотный файл?

По условию я понял, что это файл-результат, куда ты записываешь среднею длину слов в строке. Или это не то?


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


lehf
**

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

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


Цитата(Bokul @ 9.12.2006 21:20) *

По условию я понял, что это файл-результат, куда ты записываешь среднею длину слов в строке. Или это не то?

знала не спрашивала бы. no1.gif unsure.gif
ну...а насчет программы,ничего нет?Или я такая молодец,у меня все правильно? lol.gif
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #15


просто человек
******

Группа: Пользователи
Сообщений: 3 641
Пол: Женский
Реальное имя: Юлия

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


не вижу строчки assign(f1,чего-нибудь)
и сделай нормальные отступы! невозможно читать код


--------------------
Все содержимое данного сообщения (кроме цитат) является моим личным скромным мнением и на статус истины в высшей инстанции не претендует.
На вопросы по программированию, физике, математике и т.д. в аське и личке не отвечаю. Даже "один-единственный раз" в виде исключения!
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #16


Гуру
*****

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

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


Вот, глянь, что я накалякал:

const
SourceFile='с:\source.txt';
ResultFile='с:\result.txt';
function FileExist(path:string):boolean;
var t:text;
begin
assign(t,path);
{$I-}
reset(t);
{$I+}
FileExist:=ioresult=0;
close(t);
end;

procedure CountWords(st:string; var s,n:byte);
const
separators=',.!? ';
var i:byte;
begin
s:=0;
n:=0;
for i:=1 to length(st) do
if pos(st[i],separators)=0 then
inc(s)
else
if ((pos(st[i-1],separators)=0) and ((i-1)<>0)) then
inc(n);
if pos(st[length(st)],separators)=0 then
inc(n);

end;

var ts,tr:text;
sum,num:byte;
buf:string;
begin
if not(FileExist(SourceFile)) then
begin
writeln('SourceFile does not exist');
exit;
end;
assign(ts,SourceFile);
reset(ts);
assign(tr,ResultFile);
rewrite(tr);
while not eof(ts) do
begin
readln(ts,buf);
CountWords(buf,sum,num);
writeln(tr,sum/num:0:2);
end;
close(ts);
close(tr);
readln;
end.


Скажи, это то, что тебе надо?
Файл для испытаний:

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


Прикрепленные файлы
Прикрепленный файл  source.txt ( 33 байт ) Кол-во скачиваний: 237


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


lehf
**

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

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


 program ddd;

var str1,str2,imya1,imya2:string;
f1,f2:text;
kol,k,i,n:integer;
sred,c:integer;

begin

writeln('vvedite imya fajla:');
readln(imya1);assign(f1,imya1);

{$I-} reset(f1){$I+};

if IOResult<>0 then writeln('owibka v imeni fajla');
assign(f2,'imya2.txt');
rewrite(f2);

while not(eof(f1)) do
begin
readln(f1,str1);
begin
n:=length(str1);
i:=1;
kol:=0;

while i<=n do
begin
k:=0;

repeat k:=k+1;
i:=i+1;
until (str1[i]=' ') or (i>n);
kol:=kol+k;
i:=i+1;
end;

writeln(kol);


for i:=1 to n do
if (str1[i]=' ') then c:=c+1;
if (str1[1]=' ') then c:=c-1;
if (str1[n]=' ') then c:=c-1;

writeln(c+1);
sred:=trunc(kol/(c+1));
write(f2,sred);

close(f1);
close(f2);

end;
end;
end.


Bokul


я здесь ничего не понимаююююююююю..... blink.gif
мы с такими функциями на уроках не решали....я конечно же узнаю все,как это делал ты....пойму,но на это нужно определенное время и я не знаю,то ли это.....
и еще...у меня сейчас проблема главная в том,что файл не открывается....а так я даже не знаю....пашет ли у меня программа.
Спасибо тебе большое,что отликнулся!Просто я пока не знаю,то ли это.Но наверно то. unsure.gif

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


Гуру
*****

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

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


Цитата
мы с такими функциями на уроках не решали....я конечно же узнаю все,как это делал ты....пойму,но на это нужно определенное время и я не знаю,то ли это...

Если надо, могу написать комментарии или написать тоже самое, но без функций.
Цитата
а так я даже не знаю....пашет ли у меня программа.

Сейчас посмотрим smile.gif


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


lehf
**

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

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


Bokul
просто я боюсь,что она подумает,что я не сама решила и подумает правильно. wink.gif
если я правильно понимаю,то первая функция равнозначна по сути ioresult....
вторая-режет на слова.
Дальше я еще не успела даже прочитать,но я увидела
Цитата
begin
if not(FileExist(SourceFile)) then
begin
writeln('SourceFile does not exist');
exit;
end;


и меня последнее слово смутило...надеюсь это не что-то типа break?Она тада заброкует прогу.

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


Гуру
*****

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

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


Цитата
вторая-режет на слова.

no1.gif А нам и на слова резать не надо, только посчитать количество букв и слов в строке. smile.gif
Цитата
и меня последнее слово смутило...надеюсь это не что-то типа break?Она тада заброкует прогу.

Она выйдет из проги в случае неправильного открытия файла. В твоем коде, если пользователь введет неправильное имя файла, прога напишет сообщения об этом, и потом вылетит с ошибкой, а при помощью exit она сделает тоже самое, но без ошибки.
Смотри, что дает хорошое форматирование кода

var str1,str2,imya1,imya2:string;
f1,f2:text;
kol,k,i,n:integer;
sred,c:integer;
begin
writeln('vvedite imya fajla:');
readln(imya1);assign(f1,imya1);
{$I-}
reset(f1);
{$I+}
if IOResult<>0 then
writeln('owibka v imeni fajla');
assign(f2,'d:\result.txt');
rewrite(f2);
while not(eof(f1)) do
begin
readln(f1,str1);
n:=length(str1);
i:=1;
kol:=0;
while i<=n do
begin
k:=0;
repeat k:=k+1;
i:=i+1;
until (str1[i]=' ') or (i>n);
kol:=kol+k;
i:=i+1;
end;
writeln(kol);
for i:=1 to n do
if (str1[i]=' ') then c:=c+1;
if (str1[1]=' ') then c:=c-1;
if (str1[n]=' ') then c:=c-1;
writeln(c+1);
sred:=trunc(kol/(c+1));
write(f2,sred);
close(f1);
close(f2);

end;
end.



Столько ошибок видно, конечно она не правильно работает

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


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

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

 





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