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

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

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

 
 Ответить  Открыть новую тему 
> файлы, Пусть дан файл целых чисел с диапазоном значений от a и до b. Опред
сообщение
Сообщение #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 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #2


Гость






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

Если уж ты хочешь делать так, как начал - то надо Reset(f) перенести внутрь цикла For...
 К началу страницы 
+ Ответить 
сообщение
Сообщение #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 -
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #4


Гость






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

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


Бывалый
***

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

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


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

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

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

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


Профи
****

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

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


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


Бывалый
***

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

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


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

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

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


Профи
****

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

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


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

Сообщение отредактировано: Client -
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #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 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #10


Профи
****

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

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


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


Бывалый
***

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

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


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

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

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

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


Профи
****

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

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


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

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

 





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