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

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

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

 
 Ответить  Открыть новую тему 
> файлы, Пусть дан файл целых чисел с диапазоном значений от a и до b. Опред
marwell
сообщение 31.03.2010 17:06
Сообщение #1


Бывалый
***

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

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


Пусть дан файл целых чисел с диапазоном значений от a и до b.
Определите, сколько раз встречается каждое значение в файле.
 var f:text;
n,i,x,a,b:integer;
name:string;
w:word;
begin
x:=0;
writeln ('укажите путь к файлу');
readln (name);
writeln ('введите a');
readln (a);
writeln ('введите b');
readln (b);
assign(f, name);
reset (f);
for i:=a to b do begin
while not eof(f) do begin
readln (f,n);
if n=i then x:=x+1;
end;
writeln (i,'->',x);
x:=0;
end;
close (f);
readln;
end.

программа почему-то считает только первое число, остальные выводит по нулям sad.gif буду рад помощи
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
volvo
сообщение 31.03.2010 17:15
Сообщение #2


Гость






Цитата
программа почему-то считает только первое число
Потому что при первой же итерации цикла For (при i = a) ты дошел до конца файла, и при последующих итерациях у тебя из файла вообще ничего не читается, и ни с чем не сравнивается.

Если уж ты хочешь делать так, как начал - то надо Reset(f) перенести внутрь цикла For...
 К началу страницы 
+ Ответить 
marwell
сообщение 31.03.2010 17:18
Сообщение #3


Бывалый
***

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

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


Цитата(volvo @ 31.03.2010 17:15) *

Потому что при первой же итерации цикла For (при i = a) ты дошел до конца файла, и при последующих итерациях у тебя из файла вообще ничего не читается, и ни с чем не сравнивается.

Если уж ты хочешь делать так, как начал - то надо Reset(f) перенести внутрь цикла For...

спасибо, получилось smile.gif

Добавлено через 2 мин.
Цитата(volvo @ 31.03.2010 17:15) *

Если уж ты хочешь делать так, как начал - то надо Reset(f) перенести внутрь цикла For...

а есть способ попроще?

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


Гость






Попроще-то он попроще, но памяти будет требовать побольше.

"Золотое правило" - где-то выиграл - значит, где-то проиграл. В твоем случае - выигрыш: только один проход по файлу, проигрыш: необходимость хранения счетчиков в массиве. Описываешь массив достаточного размера, чтобы он мог хранить B-A элементов. Проходишь по файлу, читаешь число, и увеличиваешь соответствующий элемент массива.
 К началу страницы 
+ Ответить 
marwell
сообщение 2.04.2010 10:52
Сообщение #5


Бывалый
***

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

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


Цитата(volvo @ 31.03.2010 17:22) *

Попроще-то он попроще, но памяти будет требовать побольше.

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

блин, что-то не получается у меня второй способ sad.gif
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Client
сообщение 2.04.2010 11:33
Сообщение #6


Профи
****

Группа: Пользователи
Сообщений: 865
Пол: Мужской
Реальное имя: Вячеслав

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


ну что не получается?
массив описал? по файлу пробежать и нужный элемент увеличить в массиве или что не смог?
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
marwell
сообщение 2.04.2010 11:34
Сообщение #7


Бывалый
***

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

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


Цитата(Client @ 2.04.2010 11:33) *

ну что не получается?
массив описал? по файлу пробежать и нужный элемент увеличить в массиве или что не смог?

кажется я не понял самого алгоритма
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Client
сообщение 2.04.2010 11:38
Сообщение #8


Профи
****

Группа: Пользователи
Сообщений: 865
Пол: Мужской
Реальное имя: Вячеслав

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


описываешь массив:
mas: array[a..b] of integer;
Проходишь по файлу, читаешь, например
read(f,x);
В Х у тебя будет число. Теперь надо увеличить значение элемента в массиве с индексом Х
inc(mas[x])
Осталось только вывести массив, где ненулевые значения. Вроде все

Сообщение отредактировано: Client - 2.04.2010 11:40
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
marwell
сообщение 2.04.2010 11:47
Сообщение #9


Бывалый
***

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

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


Цитата(Client @ 2.04.2010 11:38) *

описываешь массив:
mas: array[a..b] of integer;
Проходишь по файлу, читаешь, например
read(f,x);
В Х у тебя будет число. Теперь надо увеличить значение элемента в массиве с индексом Х
inc(mas[x])
Осталось только вывести массив, где ненулевые значения. Вроде все

компилятор ругается на эту строку
 mas:array [a..b] of integer; 
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Client
сообщение 2.04.2010 11:55
Сообщение #10


Профи
****

Группа: Пользователи
Сообщений: 865
Пол: Мужской
Реальное имя: Вячеслав

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


это для примера только. Границы массива должны быть константами. Вот и не компилится.
Цитата
проигрыш: необходимость хранения счетчиков в массиве. Описываешь массив достаточного размера, чтобы он мог хранить B-A элементов
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
marwell
сообщение 2.04.2010 11:57
Сообщение #11


Бывалый
***

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

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


Цитата(Client @ 2.04.2010 11:55) *

это для примера только. Границы массива должны быть константами. Вот и не компилится.

а что делать, если а и b должны ввводиться пользователем? делать по-другому? или описать массив с достаточно большим запасом?

Сообщение отредактировано: marwell - 2.04.2010 11:58
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Client
сообщение 2.04.2010 12:03
Сообщение #12


Профи
****

Группа: Пользователи
Сообщений: 865
Пол: Мужской
Реальное имя: Вячеслав

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


какие значения a и b ?
например, опиши массив от 0 до сколько-нибудь. пусть а=100, b=200.
Сделай аналогию - сотый это как нулевой и т.д.
Получится, нужный индекс - mas[x-a].
Пробуй
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

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

 



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