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

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

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

Восстановить пароль
Повторная активизация e-mail

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

Ответ
 
Опции темы Поиск в этой теме
Старый 28.08.2008, 17:55   #1
Аннюточка
 
Регистрация: 28.08.2008
Сообщений: 7
По умолчанию Помогите студенту решить задачи по одномерным числовым массивам

Здравствуйте, помогите, пожалуйста решить задачи. Все начинала, но на каких-то моментах застреваю.

1)Дан одномерный целочисленный массив А из N элементов. Сформировать новый массив В из тех элементов массива А, которые кратны переменной М. Массив В сортировать в невозрастающем порядке. (не знаю как указать то, что числа все-таки кратные и как присвоить эти кратные числа массиву В).

2)Дан целочисленный массив А Из N элементов. Сформировать два новых массива - массив В из элементов принадлежащих интервалу [N1,N2] и массив С из элементов не принадлежащих этому интервалу. Оба результата отсортировать в невозрастающем порядке. (а тут не доходит как введеные интервальные значения сравнивать с порядковым номером элементов массива и опять же как их относить в новые массивы)

3)Дан целочисленный массив А из N элементов. Элементы массива А являются делителями максимального элемента MAX. Сформировать новый массив из тех элементов которые являются простыми числами.

4)Упорядочить массив А из N элементов методом прямого обмена. Исключить элементы массива принадлежащие интервалу [DE], осуществив сжатие.

5)дан целочисленный массив А из N элементов. Разложить элементы А в следующем порядке: сначала элементы чья старшая цифра равна 1, потом 2 и тд. Нулевые элементы исключить осуществив сжатие массива.

6)В исходном целочисленно массиве удалить все повторяющиеся элементы оставив их по одному. Осуществить сжатие массива.

7) Упорядочить исходный целочисленный массив А по убыванию сумм цифр его элементов.
Аннюточка вне форума Ответить с цитированием
Старый 28.08.2008, 18:21   #2
puporev
Старожил
 
Регистрация: 13.10.2007
Сообщений: 2,740
По умолчанию

Здравствуйте, студент Аннюточка!
Вот ответы на вопросы по первым двум задачам.
№1.
Код:
j:=0;
for i:=1 to n do
if a[i] mod m=0 then
  begin
    j:=j+1;
    b[j]:=a[i];
  end;
Сортировка.
Вывод на экран.
№2.
Код:
n1>=1;n1<=n2<=n;
j:=0;k:=0;
for i:=1 to n1-1 do
   begin
     j:=j+1;
     c[j]:=a[i];
   end;
for i:=n1 to n2 do
    begin
     k:=k+1;
     b[k]:=a[i];
   end;
for i:=n2+1 to n do
   begin
     j:=j+1;
     c[j]:=a[i];
   end;
Сортировка B.
Вывод В.
Сортировка С.
Вывод С.
По остальным задачам Вы забыли написать, что не понятно.
puporev вне форума Ответить с цитированием
Старый 28.08.2008, 18:47   #3
Аннюточка
 
Регистрация: 28.08.2008
Сообщений: 7
По умолчанию

большое Спасибо!!))
По остальным непонятно вот что:
3)Дан целочисленный массив А из N элементов. Элементы массива А являются делителями максимального элемента MAX. Сформировать новый массив из тех элементов которые являются простыми числами.
( как найти все делители этого максимального числа?)

4)Упорядочить массив А из N элементов методом прямого обмена. Исключить элементы массива принадлежащие интервалу [DE], осуществив сжатие. (как произвести сжатие)


5)дан целочисленный массив А из N элементов. Разложить элементы А в следующем порядке: сначала элементы чья старшая цифра равна 1, потом 2 и тд. Нулевые элементы исключить осуществив сжатие массива.
(как образом произвести их сравнение и распределение, как элемент массива разделить на цифры)

6)В исходном целочисленном массиве удалить все повторяющиеся элементы оставив их по одному. Осуществить сжатие массива.(как определить повторяющиеся элементы и удалить их)

7) Упорядочить исходный целочисленный массив А по убыванию сумм цифр его элементов.(как произвести это суммирование цифр элементов массива, для того чтоб его отсортировать)
Аннюточка вне форума Ответить с цитированием
Старый 28.08.2008, 20:26   #4
puporev
Старожил
 
Регистрация: 13.10.2007
Сообщений: 2,740
По умолчанию

№3 ( как найти все делители этого максимального числа?)
Код:
write('max=');readln(max);
for i:=1 to max do
if max mod i=0 then
   begin
    j:=j+1;
    a[j]:=i;
   end;
№4 (как произвести сжатие)
Код:
for i:=d to n-abs(e-d) do
   begin
     a[i]:=a[i+abs(e-d)+1];
   end;
writeln('Sdvinutyj massiv:');
for i:=1 to n-abs(e-d)-1 do
write(a[i],' ');
puporev вне форума Ответить с цитированием
Старый 28.08.2008, 20:41   #5
Аннюточка
 
Регистрация: 28.08.2008
Сообщений: 7
По умолчанию

Спасибо Вам за 3 и 4 задачки!!
Аннюточка вне форума Ответить с цитированием
Старый 28.08.2008, 22:22   #6
puporev
Старожил
 
Регистрация: 13.10.2007
Сообщений: 2,740
По умолчанию

№5 (как образом произвести их сравнение и распределение, как элемент массива разделить на цифры)
Код:
uses crt;
var a:array[1..100] of integer;
    n,i,k,x:integer;
{Opredelenie pervoj cifry}
function Cifr(x:integer):byte;
var s:string;
    t,c:integer;
begin
str(x,s);
val(s[1],t,c);
Cifr:=t;
end;
begin
clrscr;
randomize;
write('n=');readln(n);
writeln('Ishodnyj massiv:');
for i:=1 to n do
   begin
    a[i]:=random(100);
    write(a[i],' ');
   end;
writeln;
{Udalenie nolej}
for i:=n downto 1 do
if a[i]=0 then
  begin
    for k:=i to n-1 do
    a[k]:=a[k+1];
    n:=n-1;
  end;
{Sortirovka po pervoj cifre}
for i:=1 to n-1 do
for k:=1 to n-1 do
if Cifr(a[k])>Cifr(a[k+1])then
   begin
    x:=a[k];
    a[k]:=a[k+1];
    a[k+1]:=x;
   end;
writeln('Rezultat:');
for i:=1 to n do
write(a[i],' ');
readln
end.
№6 (как определить повторяющиеся элементы и удалить их)
Код:
for i:=1 to n-1 do
for j:=i+1 to n do
if a[j]=a[i] then
   begin
     for k:=j to n do
     a[k]:=a[k+1];
     n:=n-1;
   end;
№7 (как произвести это суммирование цифр элементов массива, для того чтоб его отсортировать
Код:
{functija opredelenia summy cifr}
function SumCif(z:integer):byte;
var sum,u:integer;
begin
sum:=0;
while z>0 do
   begin
    u:=z mod 10;
    sum:=sum+u;
    z:=z div 10;
   end;
SumCif:=sum;
end;
begin
. . . . . . . .
Ввод массива
. . . . . . . .
for i:=1 to n-1 do
for j:=1 to n-1 do
if SumCif(a[j])< SumCif(a[j+1]) then
  begin
    x:=a[j];
    a[j]:=a[j+1];
    a[j+1]:=x;
  end;
Вывод результата.
puporev вне форума Ответить с цитированием
Старый 28.08.2008, 22:37   #7
Аннюточка
 
Регистрация: 28.08.2008
Сообщений: 7
По умолчанию

во второй задаче записала
Код:
uses
  SysUtils;

function rus (s:string):string;
 var
 i:integer;
begin
 for i:=1 to length (s) do case s [i] of
   'А'..'п': s[i]:=chr(ord(s[i])-64);
   'р'..'я': s[i]:=chr(ord(s[i])-16);
   end;
  rus:=s;
 end;

  const nn=30;
  type size=1..nn;
  var n:size;
  a,b,c: array [size] of integer;
  n1,n2: integer;
  i,j,k: integer;
  begin

  write ('n='); readln (n);
  writeln (rus('Введите ') , n , rus(' элементов'));
  for i:= 1 to n do
  read (a[i]); writeln;
  writeln (rus('Вы ввели массив'));
  for i:=1 to n do write (a[i]:2); writeln;
   if (n1>=1) and
      (n1<=n2) and
      (n2<=n) then    j:=0;
    k:=0;
      Write (rus('Введите начальный элемент интервала: '));
      Read (n1);
      Write (rus('Введите конечный элемент интервала: '));
      Read (n2);
      for i:=1 to n1-1 do
   begin
     j:=j+1;
     c[j]:=a[i];
   end;
for i:=n1 to n2 do  
    begin
     k:=k+1;
     b[k]:=a[i];
   end;   
for i:=n2+1 to n do
   begin
     j:=j+1;
     c[j]:=a[i];   
   end;
   for k:= 1 to n do
      write (rus('массив В: '), b[k]);
   for j:= 1 to n do
      write (rus('массив С: '), c[j]);
     end.
Скажите, пожалуйста, что тут я сделала не так? после ввода интервалов программка вылетает. Можно ли было вообще записывать так то, что выделено зеленым? как нужно записывать вывод массивов?

Последний раз редактировалось Stilet; 29.08.2008 в 08:09.
Аннюточка вне форума Ответить с цитированием
Старый 29.08.2008, 07:41   #8
puporev
Старожил
 
Регистрация: 13.10.2007
Сообщений: 2,740
По умолчанию

Вот поправил.
Код:
uses
  SysUtils;
function rus (s:string):string;
var
i:integer;
begin
for i:=1 to length (s) do case s [i] of
'А'..'п': s[i]:=chr(ord(s[i])-64);
'р'..'ё': s[i]:=chr(ord(s[i])-16);//здесь до буквы ё
end;
rus:=s;
end;
const nn=30;
type size=1..nn;
var n:size;
a,b,c: array [size] of integer;
n1,n2: size;
i,j,k: integer; //нельзя size
begin
repeat      //в цикле проверяем правильность ввода
write('n='); readln (n);
until (n>=1)and(n<=30);
writeln (rus('Введите '),n,rus(' элементов'));
for i:= 1 to n do
read (a[i]);
writeln;
writeln (rus('Вы ввели массив'));
for i:=1 to n do write (a[i],' ');//лучше через пробел
writeln;
repeat        //в цикле проверяем правильность ввода
Write (rus('Введите начальный элемент интервала n1= '));
Readln(n1);
until (n1>=1)and(n1<=n-1);
repeat     //в цикле проверяем правильность ввода
Write (rus('Введите конечный элемент интервала n2= '));
Readln(n2);
until (n2>n1)and(n2<=n);
j:=0;
for i:=1 to n1-1 do
begin
j:=j+1;
c[j]:=a[i];
end;
k:=0;
for i:=n1 to n2 do
begin
k:=k+1;
b[k]:=a[i];
end;
for i:=n2+1 to n do
begin
j:=j+1;
c[j]:=a[i];
end;
writeln(rus('Массив В:'));  //длина массива = k
for  i:= 1 to k do
write (b[i],' ');
writeln;
writeln(rus('Массив C:'));   //длина массива = j
for i:= 1 to j do
write (c[i],' ');
readln
end.
puporev вне форума Ответить с цитированием
Старый 29.08.2008, 12:23   #9
Аннюточка
 
Регистрация: 28.08.2008
Сообщений: 7
По умолчанию

ура!! работает)) Спасибо
Аннюточка вне форума Ответить с цитированием
Старый 30.08.2008, 22:18   #10
Аннюточка
 
Регистрация: 28.08.2008
Сообщений: 7
По умолчанию

Перестала работать. Проблема с Delphi или в том что я тут написала.
uses
SysUtils;

function rus(s:string):string;
var
i:integer;
begin
for i:=1 to length (s) do case s [i] of
'А'..'п': s[i]:=chr(ord(s[i])-64);
'р'..'я': s[i]:=chr(ord(s[i])-16);
end;
rus:=s;
end;

var a:array of integer;
max: integer;
i,j: integer;
begin
write (rus('Введите максимальное число массива '), 'MAX= ');
readln (max);
writeln (rus('Массив А: '));
for i:=1 to max do
if max mod i=0 then
begin
j:=j+1;
a[j]:=i;
write (a[j],' ');
end;
readln;
end.

Простые числа из всего этого тоже не удается найти

writeln (rus('Простые числа: '));
for j := 1 to n do
begin
prost:= false;
d:=2;
r:=round(sqrt(n));
while(d<=r) and (n mod d<>0) do inc (d);
if d>r then prost:=true;

write (b[j], ' ');

Помогите, пожалуйста.
Аннюточка вне форума Ответить с цитированием
Ответ


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

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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
задачи по массивам - помогите !!! Heidi Паскаль, Turbo Pascal, PascalABC.NET 18 18.12.2010 15:37
Помогите студенту решить задачи traden24 Microsoft Office Excel 3 18.12.2007 12:16