Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 05.11.2013, 12:48   #1
Jane_Air
Пользователь
 
Регистрация: 03.11.2013
Сообщений: 40
По умолчанию Простые числа.Добавление в значения массив на Делфи

Добавить данное число перед последним элементом,значение которого не является простым числом. Если таких значений нет,то значение добавляется в конце
Зацикливает и еще что-то неправильно..
Может заметите ошибку..

Код:
program Project3;

{$APPTYPE CONSOLE}

uses
  SysUtils;

const Nmax=20;
type mass=array[1..Nmax] of integer;

procedure gMass1( var m:mass;   {заповнення випадковими числами}
                 var n:integer);
var i:integer;
begin
      randomize;
      n:=random(20);
      randomize;
      for i:=1 to n do
      m[i]:=10+random(21);
end;



procedure gMass2( var m:mass;             {заповнення з клавіатури}
                  var n:integer);
                  var i:integer;
begin
      repeat  writeln('vvedit n vid 1 do 10');
              readln(n);
      until (n>=1)and(n<=10);
      for i:=1 to n do begin
                           write('vvedit element z indexom ',i,' ');
                           readln(m[i]);
                       end;
end;



procedure outMass(const m:mass;n:integer);    {виведення на екран}
var i:integer;
begin
  for i:=1 to n do begin
                      write(m[i]);
                      writeln;
                   end;
end;

function prime(var x:longint):boolean;                  {просте число}
var i:longint;
begin
    x:=abs(x);
    prime:=true;
    for i:=2 to round(sqrt(x)) do if x mod i = 0
                                  then prime:=false;
end;


function ostElem(var n:integer):integer;
var i:integer;
var m:mass;
begin
i:=n;
while prime(m[i]) do dec(i);
ostElem:=i;
end;



procedure dodav(var m:mass;
                var n:integer);
var q,ii,k,i,d,ost:integer;
begin
writeln('vvedit chuslo'); readln(q);
if ii>=n+1 then begin
                  n:=n+1;
                  m[n]:=q;
                end
           else begin
                  n:=n+1;
                  k:=m[ii]; m[ii]:=q;
                  for i:=ii+1 to n do
                                begin
                                   d:=m[i];
                                   m[i]:=k;
                                   k:=d;
                                end;
                end;
end;



var a,k,n,i,ii:integer;m:mass;

begin
writeln('vuberit sposib zapovnen masuvy: vupadkovi chusla - vvedit 1');
writeln('                                z klaviatyru - bud-yake inshe shuslo');
readln(a);
if a=1 then begin
                gMass1(m,n);
                outMass(m,n);
            end
       else gMass2(m,k);
       writeln;
ostElem(n);
ii:=ostElem(n);
dodav(m,n);
writeln;
outMass(m,n);
readln;

end.
Jane_Air вне форума Ответить с цитированием
Старый 05.11.2013, 13:27   #2
SaLoKiN
Форумчанин
 
Аватар для SaLoKiN
 
Регистрация: 19.09.2013
Сообщений: 597
По умолчанию

Код:
function ostElem(var n:integer):integer;
var i:integer;
var m:mass;
кто такой массив M, и чего он содержит?
Код:
begin
i:=n;
while prime(m[i]) do dec(i);
куда лезем с n, при условии что числа вводятся до n-1

далее
Код:
begin
writeln('vvedit chuslo'); readln(q);
if ii>=n+1 then begin
кто такой ii?
Сделал сам, помоги другому!
Что-то работает не так? Дебаггер в помощь!!!

Последний раз редактировалось SaLoKiN; 05.11.2013 в 13:32.
SaLoKiN вне форума Ответить с цитированием
Старый 05.11.2013, 13:31   #3
SaLoKiN
Форумчанин
 
Аватар для SaLoKiN
 
Регистрация: 19.09.2013
Сообщений: 597
По умолчанию

и еще
Код:
const Nmax=20;
type mass=array[1..Nmax] of integer;
...
    n:=random(20);
....
if ii>=n+1 then begin
                  n:=n+1;
что будет с массивом если n равно 20?
Сделал сам, помоги другому!
Что-то работает не так? Дебаггер в помощь!!!
SaLoKiN вне форума Ответить с цитированием
Старый 05.11.2013, 14:13   #4
Mad_Cat
Made In USSR!
Старожил
 
Аватар для Mad_Cat
 
Регистрация: 01.09.2010
Сообщений: 3,657
По умолчанию

Цитата:
если n равно 20?
n не будет равно 20 никогда)
Код:
random(20) = [0..19]
"...В жизни я встречал друзей и врагов.В жизни много всего перевидал.Солнце тело мое жгло, ветер волосы трепал,но я смысла жизни так и не узнал..."
(c) Юрий Клинских aka "Хой"
Mad_Cat вне форума Ответить с цитированием
Старый 05.11.2013, 15:21   #5
Jane_Air
Пользователь
 
Регистрация: 03.11.2013
Сообщений: 40
По умолчанию

Цитата:
кто такой массив M, и чего он содержит?
Это массив, который содержит первоначальные элементы..
в этой функции мы ищем последний элемент в этом массиве,который не является простым числом,точнее его индекс.
Цитата:
куда лезем с n, при условии что числа вводятся до n-1
Почему?чисел же n..
отсчет начинаем с конца,поэтому i:=n
Цитата:
Код:
Код:
begin
writeln('vvedit chuslo'); readln(q);
if ii>=n+1 then begin
кто такой ii?
это индекс элемента в массиве,перед которым нужно вставить данное число
Его нам возвращает функция OstElem,а в теле программы есть следующее: jj:=ostElem(n)
Jane_Air вне форума Ответить с цитированием
Старый 05.11.2013, 20:51   #6
SaLoKiN
Форумчанин
 
Аватар для SaLoKiN
 
Регистрация: 19.09.2013
Сообщений: 597
По умолчанию

to Mad_Cat, не то хотел сказать. но да...тут затупил =)
to Jane_Air это были ваши ошибки, а эти вопросы наводящие для исправления =)
итак.
вопрос 1: проблема в том что вы не передаете массив в процедуру.
вопрос 3: индекс ii в вашей процедуре не получает значение.
вопрос 2: затупил с циклами =)
Сделал сам, помоги другому!
Что-то работает не так? Дебаггер в помощь!!!
SaLoKiN вне форума Ответить с цитированием
Старый 05.11.2013, 22:22   #7
Jane_Air
Пользователь
 
Регистрация: 03.11.2013
Сообщений: 40
По умолчанию

Цитата:
вопрос 1: проблема в том что вы не передаете массив в процедуру.
и как это сделать?(
Jane_Air вне форума Ответить с цитированием
Старый 06.11.2013, 05:27   #8
SaLoKiN
Форумчанин
 
Аватар для SaLoKiN
 
Регистрация: 19.09.2013
Сообщений: 597
По умолчанию

а как вы это делали до этого в 4х процедурах?
Сделал сам, помоги другому!
Что-то работает не так? Дебаггер в помощь!!!
SaLoKiN вне форума Ответить с цитированием
Старый 06.11.2013, 08:58   #9
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
function ostElem(var n:integer):integer;
var i:integer;
var m:mass;
begin
i:=n;
while prime(m[i]) do dec(i);
ostElem:=i;
end;
Jane_Air, тебе нужно почитать о видимости переменных.
var <имя переменки> говорит что эта переменная будет видимой, и с ней можно работать только в той области для которой он описан. Давай разберем твой код?
Процедура ostElem() сожержит внутри var m:mass;
Он никак не наполняется ничем абсолютно, но она с ним работает.
эта переменная никак не равна той, что описана перед главной программой, сразу после всех процедур, поэтому эта процедура будет работать с неверными данным.
А нужно как минимум передавать эту переменную, как сделано скажем тут:
Цитата:
procedure outMass(const m:mass;n:integer);
На что тебе и пытаются намекнуть.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 06.11.2013, 09:10   #10
SaLoKiN
Форумчанин
 
Аватар для SaLoKiN
 
Регистрация: 19.09.2013
Сообщений: 597
По умолчанию

Просто я думал, что коль уж везде вызывается правильно то здесь это просто оЧепятка и намека будет более чем =)
Сделал сам, помоги другому!
Что-то работает не так? Дебаггер в помощь!!!
SaLoKiN вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Даны целые числа р и q. Получить все делители числа q, взаимно простые c г. Владан Паскаль, Turbo Pascal, PascalABC.NET 2 03.12.2012 23:39
Задачи в ТурбоПаскаль: найти числа Армстронга и просуммировать числа в последовательности номера которых простые числа Lena1808 Помощь студентам 1 17.05.2012 08:00
Простые числа baha-krg Паскаль, Turbo Pascal, PascalABC.NET 0 03.04.2012 14:33
Простые числа kuy Паскаль, Turbo Pascal, PascalABC.NET 4 28.10.2011 14:44
Простые числа Verochka Помощь студентам 14 02.12.2008 20:30