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

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

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

 
 Ответить  Открыть новую тему 
> нахождение простых чисел
сообщение
Сообщение #1





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

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


В файле А.dat дано натуральное n и массив целых чисел длины n. B файл B.dat выписать все элементы массива X, индексы которых являются простыми числами. Распознование простого числа оформить в виде подпрограммы.
Очень надо решить эту задачу))) ПлиЗ

Добавлено через 2 мин.
вот что я попытался сделать, но тут есть ошибки в самой программе, а исправить незнаю как

program Kurs;

procedure nat(i:integer;var k:integer);
var n,s:integer;
begin
s:=0;
for n:=1 to i-1 do
if i mod n = 0 then s:=s+1;
if s=0 then k:=i; end;

var f:text;
a:array[1..10] of integer;
c:array[1..10] of integer;
n,i,j,k:integer;

begin
assign(f,'a.dat');
reset(f);
read(f,n);

for i:=1 to n do
read(f,a[i]);

for i:=1 to n do
write(f,a[i]);

for j:=1 to 10 do
for i:=1 to n do begin
nat(i,k);
c[j]:=a[k];
end;

writeln;
for j:=1 to 10 do
write(c[j]);

close(f);
assign(f,'b.res');
rewrite(f);
writeln;
for j:=1 to n do
write((f,c[j]);
Close(f);

end.


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


Знаток
****

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

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


smile.gif все молчю

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


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


Уникум
*******

Группа: Пользователи
Сообщений: 6 823
Пол: Мужской
Реальное имя: Лопáрь (Андрей)

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


М
He!!, приведи название темы в соответствие с Правилами - или она будет закрыта.



--------------------
я - ветер, я северный холодный ветер
я час расставанья, я год возвращенья домой
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #4


mea culpa
*****

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

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


procedure nat(i:integer;var k:integer);
var n,s:integer;
begin
s:=0;
for n:=1 to i-1 do
if i mod n = 0 then s:=s+1;
if s=0 then k:=i;
end;

program Kurs;
var f:text;
a:array[1..10] of integer;
c:array[1..10] of integer;
n,i,j,k:integer;
begin
assign(f,'a.dat');
reset(f);
read(f,n);
for i:=1 to n do
read(f,a[i]);
for i:=1 to n do
write(f,a[i]);
for j:=1 to 10 do
for i:=1 to n do begin
nat(i,k);
c[j]:=a[k];
end;
writeln;
for j:=1 to 10 do
write(c[j]);
close(f);
assign(f,'b.res');
rewrite(f);
writeln;
for j:=1 to n do
write(f,c[j]);
end.


Вот твой код. Он компилируется, нужно было убрать лишнюю скобку в предпоследней строке.
Первое - это ты не закрываешь файл в конце. Второе - я вот не вижу(может,смотрю плохо smile.gif ), где ты делаешь проверку на простое число.


--------------------
"Знаешь, стыдно - когда не видно, что услышал всё, что слушал.."
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #5


Уникум
*******

Группа: Пользователи
Сообщений: 6 823
Пол: Мужской
Реальное имя: Лопáрь (Андрей)

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


Ответ Unconnected скрыт.
Будет открыт после исправления названия.


--------------------
я - ветер, я северный холодный ветер
я час расставанья, я год возвращенья домой
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #6





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

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


все перелазил, не нашел как изменить имя темы. Извините, что заголовок темы не информативный, но решение задачи действительно нужно.

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


Уникум
*******

Группа: Пользователи
Сообщений: 6 823
Пол: Мужской
Реальное имя: Лопáрь (Андрей)

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


Цитата(He!! @ 23.12.2008 2:16) *
все перелазил, не нашел как изменить имя темы(
Редактируй свой первый пост. Там увидишь.


--------------------
я - ветер, я северный холодный ветер
я час расставанья, я год возвращенья домой
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #8





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

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


Название темы успешно отредактировано)
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #9


Уникум
*******

Группа: Пользователи
Сообщений: 6 823
Пол: Мужской
Реальное имя: Лопáрь (Андрей)

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


спасибо


--------------------
я - ветер, я северный холодный ветер
я час расставанья, я год возвращенья домой
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #10





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

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


Цитата(Unconnected @ 22.12.2008 14:09) *



Вот твой код. Он компилируется, нужно было убрать лишнюю скобку в предпоследней строке.
Первое - это ты не закрываешь файл в конце. Второе - я вот не вижу(может,смотрю плохо smile.gif ), где ты делаешь проверку на простое число.


1) про скобку я непонял, какая именно? в предпоследней стороке все скобки необходимы.
2)проверку на простое числу выполняю в процедуре. см самый верх
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #11


Уникум
*******

Группа: Пользователи
Сообщений: 6 823
Пол: Мужской
Реальное имя: Лопáрь (Андрей)

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


Вот работающая программа. Извини, твою править было долго и не очень осмысленно - ошибки как в программировании, так и в идее.
Если непонятно, спрашивай.
function IsPrime(n: integer): boolean;
var
i,k: integer;
b: boolean;
begin
b:=(i>1);
i:=2;
k:=Trunc(Sqrt(n));
while (i<=k) and b do begin
b:=(n mod i>0);
Inc(i)
end;
IsPrime:=b
end;

var
f,g: text;
n,i,a: integer;

begin
assign(f,'a.dat');
reset(f);
ReadLn(f,n);
assign(g,'b.dat');
ReWrite(g);
for i:=1 to n do begin
read(f,a);
if IsPrime(i) then WriteLn(g,a)
end;
Close(f);
Close(g)
end.


2 Unconnected:
вопрос был не только в том, чтоб заставить программу компилироваться. Иначе всегда можно предложить вариант
begin
end.


--------------------
я - ветер, я северный холодный ветер
я час расставанья, я год возвращенья домой
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #12


Гость






Цитата
function IsPrime(n: integer): boolean;
var
i,k: integer;
b: boolean;
begin
b:=(i>1); { <--- !!! }
i:=2;
k:=Trunc(Sqrt(n));
while (i<=k) and b do begin
b:=(n mod i>0);
Inc(i)
end;
IsPrime:=b
end;
- Русская рулетка? Я про отмеченную строку... smile.gif

i - локальная переменная, может быть и все время равна 0 или 1, как повезет, тогда ни одно число простым не будет... Скорее всего N имелся в виду?
 К началу страницы 
+ Ответить 
сообщение
Сообщение #13


Уникум
*******

Группа: Пользователи
Сообщений: 6 823
Пол: Мужской
Реальное имя: Лопáрь (Андрей)

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


Цитата(volvo @ 23.12.2008 10:51) *
- Русская рулетка? Я про отмеченную строку... smile.gif
... Скорее всего N имелся в виду?
Ага! smile.gif)))
что-то меня дернуло поменять буковку в середине написания проги...
Спасибо!


--------------------
я - ветер, я северный холодный ветер
я час расставанья, я год возвращенья домой
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #14





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

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


Функцию совсем не понимаю, какая там идея? И что как там вообще?
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #15


Уникум
*******

Группа: Пользователи
Сообщений: 6 823
Пол: Мужской
Реальное имя: Лопáрь (Андрей)

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


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

function IsPrime(n: integer): boolean;  { IsPrime = ЯвляетсяПростым (с английского) } 
var
i,k: integer;
b: boolean; { будет true, пока (и если) не обнаружится, что число составное }

begin

b:=(n>1); { инициализация b, заодно отсечение числа 1, которое не простое, равно true, если n>1 }

i:=2; { инициализация счетчика цикла }

k:=Trunc(Sqrt(n)); { верхний предел цикла - квадратный корень из числа. Дальше проверять нет смысла }

while (i<=k) and b do begin { цикл до верхнего предела или пока не поделится нацело }

b:=(n mod i>0); { true, если число НЕ делится нацело на i (то есть остаток есть) }

Inc(i) { увеличиваем параметр цикла }

end;

IsPrime:=b { Присваиваем возвращаемый результат }

end;



--------------------
я - ветер, я северный холодный ветер
я час расставанья, я год возвращенья домой
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #16





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

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


я разобрался в программе, но проверяя число три, оно у меня не получается простым. k получается равным 1, а
i=2,тоесть у нас i<k, значит цикл ниразу не выполняется

Добавлено через 5 мин.
Цитата(He!! @ 24.12.2008 1:51) *

я разобрался в программе, но проверяя число три, оно у меня не получается простым. k получается равным 1, а
i=2,тоесть у нас i<k, значит цикл ниразу не выполняется



Наверное значиние true к b присваевается когда b:=(n>1) и так и остается то конца функции, те число три простое

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


Уникум
*******

Группа: Пользователи
Сообщений: 6 823
Пол: Мужской
Реальное имя: Лопáрь (Андрей)

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


Цитата(He!! @ 24.12.2008 1:51) *
я разобрался в программе, но проверяя число три,

Ты исправил ошибку, которую заметил volvo? Первая строка исполняемого кода в функции.

неправильно:
b:=(i>1);

нужно:
b:=(n>1);


Добавлено через 5 мин.
Цитата(He!! @ 24.12.2008 1:51) *
Наверное значиние true к b присваевается когда b:=(n>1) и так и остается то конца функции, те число три простое
Именно так.


--------------------
я - ветер, я северный холодный ветер
я час расставанья, я год возвращенья домой
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #18





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

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


И еще вопрос, например берем число 27. k=5, тогда от2 до 5 значение b=true, b=false, b=true, b=true. И чего программа делает с этими значениями, как мен кажется она просто их заменяет старый на новый по ходу выполнения цикла. По идее она должна их перемножить что бы ответ был false. Можно уточнить еще этот момент, почему он именно перемножает?
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #19


Уникум
*******

Группа: Пользователи
Сообщений: 6 823
Пол: Мужской
Реальное имя: Лопáрь (Андрей)

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


Цитата(He!! @ 24.12.2008 2:06) *
И еще вопрос, например берем число 27. k=5, тогда от2 до 5 значение b=true, b=false, b=true, b=true. И чего программа делает с этими значениями, как мен кажется она просто их заменяет старый на новый по ходу выполнения цикла. По идее она должна их перемножить что бы ответ был false. Можно уточнить еще этот момент, почему он именно перемножает?

Посмотри на условия цикла:
while (i<=k) and b do begin

- как только b становится false, цикл прекращается.


--------------------
я - ветер, я северный холодный ветер
я час расставанья, я год возвращенья домой
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #20





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

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


ММММ, точно))) я все понял, спасибо за внимание. очень благодарен give_rose.gif good.gif good.gif
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

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

 





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