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

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

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

> Ввести файл F из 12 элементов
mfractus
сообщение 26.04.2011 20:28
Сообщение #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 страниц V  1 2 >  
 Ответить  Открыть новую тему 
Ответов(1 - 19)
DarkWishmaster
сообщение 26.04.2011 20:36
Сообщение #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 
 К началу страницы 
+ Ответить 
mfractus
сообщение 26.04.2011 20:48
Сообщение #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 - 26.04.2011 20:48
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Freedom
сообщение 26.04.2011 21:12
Сообщение #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 
 К началу страницы 
+ Ответить 
mfractus
сообщение 26.04.2011 21:39
Сообщение #5


Новичок
*

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

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


Что такое If flag then?
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Freedom
сообщение 26.04.2011 21:50
Сообщение #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 
 К началу страницы 
+ Ответить 
mfractus
сообщение 26.04.2011 22:06
Сообщение #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 
 К началу страницы 
+ Ответить 
DarkWishmaster
сообщение 26.04.2011 22:25
Сообщение #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 - 26.04.2011 22:27
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Freedom
сообщение 26.04.2011 22:25
Сообщение #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 
 К началу страницы 
+ Ответить 
mfractus
сообщение 26.04.2011 22:29
Сообщение #10


Новичок
*

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

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


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


Пионер
**

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

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


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

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

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


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


Бывалый
***

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

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


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

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

Если у тебя проблема с boolean то можно через любую переменую каторая будет изменять свое значения в зависимости было или нет совершено умножение например:
там где flag:=true меняем на a:=1 (a-переменая каторая сначала 0)
потом смотришь если она 0 то таких чисел нет...
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
mfractus
сообщение 26.04.2011 22:38
Сообщение #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 
 К началу страницы 
+ Ответить 
DarkWishmaster
сообщение 26.04.2011 22:40
Сообщение #14


Бывалый
***

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

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


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

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


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


Новичок
*

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

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


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

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

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

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


Бывалый
***

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

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


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

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

Если с flag(boolean) то все будет верно. Так как у boolean всего два значения(True/False), а для переменой которая будет принимать только значения 0 и 1 будет нелогично исп. типы integer или logint и.д. так что придеться создать свой тип (0..1) бинарный. Всё же когда у нас только два выбора, нужно исп. логический тип boolean.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
mfractus
сообщение 26.04.2011 22:52
Сообщение #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 
 К началу страницы 
+ Ответить 
DarkWishmaster
сообщение 26.04.2011 23:05
Сообщение #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 - 26.04.2011 23:07
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
mfractus
сообщение 26.04.2011 23:09
Сообщение #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 
 К началу страницы 
+ Ответить 
DarkWishmaster
сообщение 26.04.2011 23:14
Сообщение #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 - 26.04.2011 23:16
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

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

 



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