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

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

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

2 страниц V  1 2 >  
 Ответить  Открыть новую тему 
> Ввести файл F из 12 элементов
сообщение
Сообщение #1


Новичок
*

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

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


Здравствуйте уважаемые пользователи ресурса! Прошу помощи в решении задачи.

Ввести файл F из 12 элементов. Определить в нём произведение тех
элементов, чей модуль лежит в диапазоне [ 1; 5]. Заранее спасибо!

Начал с ввода файла F:

program ABC;
var b,P,i:integer;
f:file of integer;
begin
assign(f,'f.dat');
rewrite(f);
writeLn('вводите 12 компонент файла f:');
for i:=1 to 12 do
begin
writeLn('введите ',i,'-ую компоненту файла f');
readLn(b);
write(f,b);
end;

 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #2


Бывалый
***

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

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


вычисляем произведение:


P:=1;
for i:=1 to 12 do
begin
writeLn('введите ',i,'-ую компоненту файла f');
readLn(b);
if (abs(b)>=1) and (abs(b)<=5) then P:=P*b;
write(f,b);
end;
writeln('произведение элементов: ',P);



 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #3


Новичок
*

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

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


Большое спасибо! В итоге будет так?

program ABC;
var b,P,i:integer;
f:file of integer;
begin
assign(f,'f.dat');
rewrite(f);
writeLn('вводите 12 компонент файла f:');
P:=1;
for i:=1 to 12 do
begin
writeLn('введите ',i,'-ую компоненту файла f');
readLn(b);
if (abs(b)>=1) and (abs(b)<=5) then P:=P*b;
write(f,b);
end;
writeln('произведение элементов: ',P);
else
writeLn('в файле нет таких элементов');
close(f);
end.


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


Пионер
**

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

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


Цитата(mfractus @ 26.04.2011 21:48) *

Большое спасибо! В итоге будет так?

program ABC;
var b,P,i:integer;
f:file of integer;
begin
assign(f,'f.dat');
rewrite(f);
writeLn('вводите 12 компонент файла f:');
P:=1;
for i:=1 to 12 do
begin
writeLn('введите ',i,'-ую компоненту файла f');
readLn(b);
if (abs(b)>=1) and (abs(b)<=5) then P:=P*b;
write(f,b);
end;
writeln('произведение элементов: ',P);
else {тут не понятно что за условие}
writeLn('в файле нет таких элементов');
close(f);
end.


Есть ошибка, если вы хотите чтобы писало есть такие элементы или нет, то примерно:
program ABC;
var b,P,i:integer;
f:file of integer;
flag:boolean;
begin
assign(f,'f.dat');
rewrite(f);
writeLn('write 12 elements of f:');
P:=1;
flag:=false;
for i:=1 to 12 do
begin
writeLn('write ',i,'element f');
readLn(b);
if (abs(b)>=1) and (abs(b)<=5) then begin P:=P*b; flag:=true; end;
write(f,b);
end;
If flag then
writeln('Proizvedenie= ',P) else
writeLn('No this elements');
close(f);
end.


--------------------
From ZERO to HERO
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #5


Новичок
*

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

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


Что такое If flag then?
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #6


Пионер
**

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

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


Цитата(mfractus @ 26.04.2011 22:39) *

Что такое If flag then?

flag - переменная boolean, которая принимает значения true или false если условие выполняется
If flag then то же что и If flag=true then
вывести произведение, иначе вывести что нету таких.


--------------------
From ZERO to HERO
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #7


Новичок
*

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

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


Вот так можно сделать?
 program ABC;
var b,P,i:integer;
f:file of integer;
begin
assign(f,'f.dat');
rewrite(f);
writeLn('вводите 12 компонент файла f:');
for i:=1 to 12 do
begin
writeLn('введите ',i,'-ую компоненту файла f');
readLn(b);
write(f,b);
end;
// поиск
reset(f);
P:=1;
while not EOF(f) do
begin
read(f,b);
if (abs(b)>=1) and (abs(b)<=5) then
begin
P:=P*b;
end;
end;
// вывод результатов
if P=1 then
begin
writeLn('В файле нет таких элементов')
end
else
writeln('произведение элементов: ',P);
close(f);
end.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #8


Бывалый
***

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

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


так как у тебя интервал [1:5] а не (1:5) то некоректно использовать
if P=1 then //нету таких чисел

потому что если у тебя будет например: 1 9 6 1 -1 -2 7 -1
то произведение будет: 1*1*(-1)*(-1)=1 т.е P=1 но ведь таких чисел 4!
А переменая flag смотрит если было произвидено хотя бы одно умножение, если да то очевидно что такие элементы существуют и можно вывести произведение на экран.

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


Пионер
**

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

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


Цитата(mfractus @ 26.04.2011 23:06) *

Вот так можно сделать?
 program ABC;
var b,P,i:integer;
f:file of integer;
begin
assign(f,'f.dat');
rewrite(f);
writeLn('вводите 12 компонент файла f:');
for i:=1 to 12 do
begin
writeLn('введите ',i,'-ую компоненту файла f');
readLn(b);
write(f,b);
end;
// поиск
reset(f);
P:=1;
while not EOF(f) do
begin
read(f,b);
if (abs(b)>=1) and (abs(b)<=5) then
begin
P:=P*b;
end;
end;
// вывод результатов
if P=1 then
begin
writeLn('В файле нет таких элементов')
end
else
writeln('произведение элементов: ',P);
close(f);
end.


У вас ведь промежуток [1;5] если сделать как вы то получается если произведение=1 тогда вывести что нет таких, а если например один из элементов=1 тогда, получается что P так и останется 1, и у вас выведет что нету таких элементов


--------------------
From ZERO to HERO
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #10


Новичок
*

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

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


Большое спасибо за пояснение! Можно ли исправить данную ситуацию без помощи flag? Через else может просто?
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #11


Пионер
**

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

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


Цитата(mfractus @ 26.04.2011 23:29) *

Большое спасибо за пояснение! Можно ли исправить данную ситуацию без помощи flag? Через else может просто?

А почему вам не нравится flag? можно переделать. В смысле просто через else?


--------------------
From ZERO to HERO
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #12


Бывалый
***

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

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


Цитата(mfractus @ 26.04.2011 22:29) *

Большое спасибо за пояснение! Можно ли исправить данную ситуацию без помощи flag? Через else может просто?

Если у тебя проблема с boolean то можно через любую переменую каторая будет изменять свое значения в зависимости было или нет совершено умножение например:
там где flag:=true меняем на a:=1 (a-переменая каторая сначала 0)
потом смотришь если она 0 то таких чисел нет...
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #13


Новичок
*

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

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


Цитата(Freedom @ 26.04.2011 23:34) *

А почему вам не нравится flag? можно переделать. В смысле просто через else?

Я вас понял, конечно же, будет лучше использовать flag. Почему предложенный Вами код программы намного короче? Я делал основываясь на примере.. к примеру присутствует часть кода
reset(f);
P:=1;
while not EOF(f) do
begin
read(f,b);
?
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #14


Бывалый
***

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

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


Цитата(mfractus @ 26.04.2011 22:38) *

Я вас понял, конечно же, будет лучше использовать flag. Почему предложенный Вами код программы намного короче? Я делал основываясь на примере.. к примеру присутствует часть кода
reset(f);
P:=1;
while not EOF(f) do
begin
read(f,b);
?


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


Новичок
*

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

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


Цитата(DarkWishmaster @ 26.04.2011 23:34) *

Если у тебя проблема с boolean то можно через любую переменую каторая будет изменять свое значения в зависимости было или нет совершено умножение например:
там где flag:=true меняем на a:=1 (a-переменая каторая сначала 0)
потом смотришь если она 0 то таких чисел нет...

Спасибо за ответ!

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


Бывалый
***

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

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


Цитата(mfractus @ 26.04.2011 22:41) *

Спасибо за ответ, это будет верно с точки зрения написания программы? До этого с такой проблемой не сталкивался..

Если с flag(boolean) то все будет верно. Так как у boolean всего два значения(True/False), а для переменой которая будет принимать только значения 0 и 1 будет нелогично исп. типы integer или logint и.д. так что придеться создать свой тип (0..1) бинарный. Всё же когда у нас только два выбора, нужно исп. логический тип boolean.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #17


Новичок
*

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

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


Задача Ввести файл F . Каждый второй элемент в файле, чьё значение лежит в
диапазоне [−3; 5] заменить единицей. Файл вывести до и после
преобразования. Практически аналогична, но вот в ней не могу прописать условие.

Начинаю с ввода F

begin
assign(f,'f.dat');
writeLn('введите первую компоненту файла f (признак конца
ввода: "555")');
//ввод файла
rewrite(f);
readLn(b);
i:=1; //номер компоненты файла
while b<>555 do
begin
write(f,b);
inc(i);
writeLn('введите ',i,'-ую компоненту файла f');
readLn(b);
end;
//вывод файла до изменения
reset(f);
writeLn('файл f до изменения:');
while not EOF(f) do
begin
read(f,b);
write(b:5);
end;
writeLn;


Добавлено через 2 мин.
Цитата(DarkWishmaster @ 26.04.2011 23:50) *

Если с flag(boolean) то все будет верно. Так как у boolean всего два значения(True/False), а для переменой которая будет принимать только значения 0 и 1 будет нелогично исп. типы integer или logint и.д. так что придеться создать свой тип (0..1) бинарный. Всё же когда у нас только два выбора, нужно исп. логический тип boolean.

Большое спасибо за столь подробное объяснение!
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #18


Бывалый
***

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

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


Цитата(mfractus @ 26.04.2011 22:52) *

Задача Ввести файл F . Каждый второй элемент в файле, чьё значение лежит в
диапазоне [−3; 5] заменить единицей. Файл вывести до и после
преобразования. Практически аналогична, но вот в ней не могу прописать условие.

Начинаю с ввода F

Можно:
1)Ввести в 1 файл, потом создать ещё один где ты уже будешь писать преобразовыне числа.
2) Когда записываешь в 1 файл можно запоминать числа в векторе, а потом уже rewrite и пишешь числа из вектора и изменяем их.
3)Если тупо надо вывести на экран файл то можно так:

begin
assign(f,'f.dat');
writeLn('введите первую компоненту файла f (признак конца
ввода: "555")');
//ввод файла
rewrite(f);
readLn(b);
i:=1; //номер компоненты файла
while b<>555 do
begin
write(f,b);
inc(i);
writeLn('введите ',i,'-ую компоненту файла f');
readLn(b);
end;
//вывод файла до изменения
reset(f);
writeLn('файл f до изменения:');
while not EOF(f) do
begin
read(f,b);
write(b:5);
end;
//вывод файла после изменения
reset(F);
while not Eof(F) do
read(f,b);
if (b>=-3) and (b<=5) then write(1:5)
else write(b:5);
writeLn;


но при пункте 3, содержимое файла будет тем же как и до изменения. Если преоброзовать файл то надо где-то помнить изначальное его содержимое.

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


Новичок
*

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

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


Вот пример:
 // увеличение на 5 в файле элементов больших четырех,
// не стоящих на позициях кратных трём
reset(f);
while not EOF(f) do
begin
read(f,b);
if (b>4) and ((filepos(f)-1) mod 3 <> 0) then
begin
seek(f,filepos(f)-1);
b:=b+5;
write(f,b);
end;
end;
//вывод файла после изменения
reset(f);
writeLn('файл f после изменения:');
while not EOF(f) do
begin
read(f,b);
6
write(b:5);
end;
writeLn;
close(f);
end.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #20


Бывалый
***

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

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


меняешь условие на
if (b>=-3) and (b<=5) and ((Filepos(f)-1) mod 2<>0) then
begin
seek(f,filepos(f)-1);
b:=1;
write(f,b);
end;


хм, а я думал что при reset можно только читать из файла

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

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

 





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