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

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

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

> Кольцевой список и простые числа, (разделено)
Buch
сообщение 13.12.2006 14:19
Сообщение #1





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

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


Не знаю как лучше, создать отдельную тему или написать в эту....
Отдельную тему я бы назвал "Кольцевой список и простые числа"
Есть задачка на динамическую память... Необходимо составить программу, которая каждый элемент кольцевого однонаправленного списка с заглавным элементом увеличивает на 3, а затем вычеркивает те из них, которые будут простыми.
Так вот проблема в поиске простых чисел (удаление пока не трогаю, хотя оно тоже криво работает, выдает ошибку "ссылка на не существующий указатель). До 14и она работает нормально, а с 15и начинается дребедень:
1. 15 - простое, дальше правильно, 21 - опять считает простым, потом 25, потом 35, дальше не проверял...
2. Если в списке присутствует 1 (кроме случая, когда она последняя), то система проверки на простые числа вообще не работает.
Вот код:

program kos;

{$APPTYPE CONSOLE}

uses
SysUtils;

Type pe=^el; {Указатель на элемент списковой структуры}
el=record {Элемент списка}
inf:integer; {Информационное поле типа integer}
next:pe {Указатель на следующий элемент}
end;


//функция вывода на экран списка P
function vivod(p:pe):boolean;
var lastp:pe;
begin
lastp := p^.next;
while lastp <> p do
begin
Write(lastp^.inf, ' ');
lastp := lastp^.next;
end;
WriteLn(' ]');
vivod := true;
end;


Var
temp, lastp, p: pe;
i, n, k: integer;



Begin

//контроль значения количества элементов
{$I-}
Write('Vvedite kolichestvo elementov: ');
ReadLn(n);
Writeln;
while (n<=0) or (ioresult<>0) do
begin
Writeln('Kolichestvo elementov dolgno bit` celim CHISLOM, HE men`she i HE ravno `0` ');
Write('Vvedite kolichestvo elementov: ');
ReadLn(n);
Writeln;
end;
{$I+}

//построения КОС с включенным заглавным элементом
Writeln('Vvedite ', n, ' celih chisel!');
new(p);
p^.next:=p;
lastp:=p;
For i:=1 to n do
begin
new(lastp^.next);
lastp:=lastp^.next;
Write('Vvedite ',i,' element spiska: ');
ReadLn(lastp^.inf);
end;
lastp^.next:=p;


//вывод списка P на экран
Write('Spiska P = [ ');
vivod(p);


//удаление элементов, являющихся простыми числами
lastp := p^.next;
while lastp <> p do
begin
if (lastp^.inf=2) or (lastp^.inf=3) then
begin
writeln('prostie (2 ili 3) - ', lastp^.inf);
{ temp := lastp^.next;
dispose(lastp);
lastp := temp;
break; //удаление тоже криво работает }
end
else
if lastp^.inf<2 then
begin
break;
end
else
for k:=2 to trunc(sqrt(lastp^.inf)) do
if lastp^.inf mod k = 0 then
begin
break;
end
else
begin
writeln('prostie - ', lastp^.inf);
{ temp := lastp^.next;
dispose(lastp);
lastp := temp;
break; //удаление тоже криво работает }
break;
end;
lastp := lastp^.next;
end;


Write('It`s FINISH');
readln

end.


Подскажите плиз, в чем ошибка!? unsure.gif
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
 
 Ответить  Открыть новую тему 
Ответов
volvo
сообщение 13.12.2006 14:42
Сообщение #2


Гость






Ты бы читал повнимательнее (а не просто SPAM-mode включал dry.gif ), тогда бы увидел, что:
Цитата
Так вот проблема в поиске простых чисел (удаление пока не трогаю, хотя оно тоже криво работает, выдает ошибку "ссылка на не существующий указатель). До 14и она работает нормально, а с 15и начинается дребедень:
1. 15 - простое
, дальше правильно, 21 - опять считает простым, потом 25, потом 35, дальше не проверял...
 К началу страницы 
+ Ответить 

Сообщений в этой теме


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

 



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