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

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

Вернуться   Форум программистов > Delphi программирование > Паскаль, Turbo Pascal, PascalABC.NET
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 06.02.2012, 07:32   #1
qpJIaqpU
Пользователь
 
Регистрация: 05.02.2012
Сообщений: 14
По умолчанию Две задачки

Дали две задачи:
1.Дан массив целых числе a1....an.Найти максимальный элемент среди отрицательных элементов и поменять его местами с минимальным положительным.
2.Заполнить массив У произведениями соседных двух элементов массива Х.
Заранее благодарю!
Pascal
qpJIaqpU вне форума Ответить с цитированием
Старый 06.02.2012, 07:42   #2
Вадим Мошев

Старожил
 
Аватар для Вадим Мошев
 
Регистрация: 12.11.2010
Сообщений: 8,568
По умолчанию

К какому числу вам надо это решить?
Вадим Мошев вне форума Ответить с цитированием
Старый 06.02.2012, 12:37   #3
Firstchar
Пользователь
 
Регистрация: 29.09.2011
Сообщений: 23
По умолчанию

Код:
program abc;
uses crt;
var mas:array[1..100] of integer;
i,n, min, max, k,k1:integer;
procedure input;
begin
write('количество элементов массива: ');
readln(n);
for i:=1 to n do 
mas[i]:=random[500]-250;
end;
procedure output;
begin
for i:=1 to n do
write(mas[i]:5);
writeln;
end;
procedure trans;
for i:=1 to n do
begin
if mas[i]<0 then
begin
 max:=mas[i];
k:=i;
break;
end;
end;
for i:=1 to n do
begin
if mas[i]>0 then 
begin
min:=mas[i];
k1:=i;
break;
end;
end;
for i:=1 to n do
begin
if (mas[i]>max) and (mas[i]<0) then
begin
max:=mas[i];
k:=i;
end;
if (mas[i]<min) and (mas[i]>=0) then
begin
min:=mas[i];
k1:=i;
end;
end;
mas[k]:=min;
mas[k1]:=max;
end;
begin
clrscr;
input;
writeln;
writeln('исходый массив: ');
output;
trans;
writeln('полученный массив: ');
output;
writeln;
writeln('минимальный положительный элемент массива: ', min);
writeln('максимальный отрицательный элемент массива: ', max);
readkey;
end.
это первая. при желании вторую можно впихнуть в нее же.

а по второй вопрос:
допустим массив Х: 1 2 3 4 5 6
значит массив Y: 1*2 2*3 3*4 4*5 5*6
или 1*2 3*4 5*6?

Последний раз редактировалось Firstchar; 06.02.2012 в 12:53.
Firstchar вне форума Ответить с цитированием
Старый 06.02.2012, 20:09   #4
skyll
Пользователь
 
Регистрация: 05.02.2012
Сообщений: 28
По умолчанию

Собственной персоной вторая задача:

Код:
program prog;
uses crt;
const
     width = 10;
var
   ar: array [1..width] of real;
   i: integer;
begin
     for i := 1 to width do begin
         if i < 3 then
            ar[i] := i
         else
             ar[i] := ar[i - 2] * ar[i - 1];
         write(ar[i],'  ');
     end;
end.
Если я правильно понял ее смысл)
skyll вне форума Ответить с цитированием
Старый 06.02.2012, 22:08   #5
qpJIaqpU
Пользователь
 
Регистрация: 05.02.2012
Сообщений: 14
По умолчанию

Спасибо огромное, мне к завтрашнему дню, оперативно вы тут помогаете ребят
qpJIaqpU вне форума Ответить с цитированием
Старый 06.02.2012, 22:15   #6
skyll
Пользователь
 
Регистрация: 05.02.2012
Сообщений: 28
По умолчанию

Не за что, в следующий раз лучше с примером приходи)
skyll вне форума Ответить с цитированием
Старый 08.02.2012, 08:26   #7
qpJIaqpU
Пользователь
 
Регистрация: 05.02.2012
Сообщений: 14
По умолчанию

хех, обе задачи у меня не приняли,насчет второй сказали, что там нужно два массива, а первая слишком большая, сказали мы её решаем проще
qpJIaqpU вне форума Ответить с цитированием
Старый 08.02.2012, 09:25   #8
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

1-я.
Код:
const N = 10;

var 
  A : array[1..N] of integer;
  MinPozIndex, MaxNegIndex : integer;
  i, T : integer;

begin
  Randomize;
  {заполнение исходного массива случайными числами от -20 до 20}
  for i:=1 to N do begin
     T := Random(41);
     A[i] := T-20;
  end;

  {вывести полученный массив на экран}
  WriteLn('Исходный массив: ');
  for i:=1 to N do Write(A[i]:3,' ');
  WriteLn;

  {иницилизация индексов для поиска, -1 означает - не найдено}
  MinPozIndex :=-1;
  MaxNegIndex :=-1;
  {поиск индексов минимального положительного и максимального отрицательного}
  for i:=1 to N do
    if A[i]<0 then begin {если число отрицательное, то}
      if MaxNegIndex=-1 then MaxNegIndex := i  {если ещё не было отрицательных,
                                                то первое считаем как максимальное}
      else {уже были отрицательные, тогда сравним значения}
        if A[i]>A[MaxNegIndex] then MaxNegIndex := i; {если очередное больше - то берём его как MAX}
    end
    else begin {значит очередное A[i] - положительное число (включая ноль)}
      if MinPozIndex=-1 then MinPozIndex := i  {если ещё не было положительных,
                                                то первое считаем как минимальное}
      else {уже были положительные числа, тогда сравним значения}
        if A[i]<A[MinPozIndex] then MinPozIndex := i; {если очередное число меньше
                                                       - то берём его как MIN}
    end;


  if MinPozIndex =-1 then WriteLn('Не было положительных чисел!');
  if MaxNegIndex =-1 then WriteLn('Не было отрицательных чисел!');

  {если найдены оба экстремума, то поменяем их местами}
  if (MinPozIndex<>-1) and (MaxNegIndex<>-1) then begin
    WriteLn('Меняем элементы с номерами (индексами) ',MaxNegIndex,' и ',MinPozIndex);
    T := A[MinPozIndex];
    A[MinPozIndex] := A[MaxNegIndex];
    A[MaxNegIndex] := T;

    {вывести полученный массив на экран}
    WriteLn('полученный массив: ');
    for i:=1 to N do Write(A[i]:3,' ');
    WriteLn;

  end;


  Readln
end.
Serge_Bliznykov вне форума Ответить с цитированием
Старый 08.02.2012, 22:04   #9
qpJIaqpU
Пользователь
 
Регистрация: 05.02.2012
Сообщений: 14
Радость

Цитата:
Сообщение от Serge_Bliznykov Посмотреть сообщение
1-я.
Код:
const N = 10;

var 
  A : array[1..N] of integer;
  MinPozIndex, MaxNegIndex : integer;
  i, T : integer;

begin
  Randomize;
  {заполнение исходного массива случайными числами от -20 до 20}
  for i:=1 to N do begin
     T := Random(41);
     A[i] := T-20;
  end;
  {вывести полученный массив на экран}
  WriteLn('Исходный массив: ');
  for i:=1 to N do Write(A[i]:3,' ');
  WriteLn;

  {иницилизация индексов для поиска, -1 означает - не найдено}
  MinPozIndex :=-1;
  MaxNegIndex :=-1;
  {поиск индексов минимального положительного и максимального отрицательного}
  for i:=1 to N do
    if A[i]<0 then begin {если число отрицательное, то}
      if MaxNegIndex=-1 then MaxNegIndex := i  {если ещё не было отрицательных,
                                                то первое считаем как максимальное}
      else {уже были отрицательные, тогда сравним значения}
        if A[i]>A[MaxNegIndex] then MaxNegIndex := i; {если очередное больше - то берём его как MAX}
    end
    else begin {значит очередное A[i] - положительное число (включая ноль)}
      if MinPozIndex=-1 then MinPozIndex := i  {если ещё не было положительных,
                                                то первое считаем как минимальное}
      else {уже были положительные числа, тогда сравним значения}
        if A[i]<A[MinPozIndex] then MinPozIndex := i; {если очередное число меньше
                                                       - то берём его как MIN}
    end;


  if MinPozIndex =-1 then WriteLn('Не было положительных чисел!');
  if MaxNegIndex =-1 then WriteLn('Не было отрицательных чисел!');

  {если найдены оба экстремума, то поменяем их местами}
  if (MinPozIndex<>-1) and (MaxNegIndex<>-1) then begin
    WriteLn('Меняем элементы с номерами (индексами) ',MaxNegIndex,' и ',MinPozIndex);
    T := A[MinPozIndex];
    A[MinPozIndex] := A[MaxNegIndex];
    A[MaxNegIndex] := T;

    {вывести полученный массив на экран}
    WriteLn('полученный массив: ');
    for i:=1 to N do Write(A[i]:3,' ');
    WriteLn;

  end;


  Readln
end.
Серж, не обижайтесь, спасибо за старание,но у меня такую задачу не примут, т.к здесь использваны опраторы, которые мы не проходили по курсу, (1-ый курс)

Последний раз редактировалось Stilet; 08.02.2012 в 22:32.
qpJIaqpU вне форума Ответить с цитированием
Старый 08.02.2012, 23:53   #10
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Цитата:
Серж, не обижайтесь, спасибо за старание,но у меня такую задачу не примут, т.к здесь использваны опраторы, которые мы не проходили по курсу, (1-ый курс)
стоп. так не пойдёт. Разберите пример построчно (благо я почти каждый чих оформил комментарием).
Те операторы, которые "Вы не проходили" - сообщите тут, на форуме.
тут есть только задание переменных, операторы сравнения и присваивания. оператор цикла. всё.

или Вы имеете в виду функцию WriteLn ?! Это выдать сообщение на устройство вывода (на консоль, например).
Или Randomize и Random смутили?
Так они просто заполняют массив случайными числами.
Не нравится - выкиньте их напрочь и задайте цикл ввода значений с клавиатуры (пусть пользователь программы их вводит ручками!)

а то, что у вас на 1-м курсе какая-то супероблегчённая программа - это ваши трудности. Тут на форуме бывают школьники решают такие задачи, что оторопь берёт (на порядок сложнее ваших задач!)



p.s. На будущее - не надо оставлять полностью чужое сообщение при цитировании - это называется overquoting (оверквотинг, оно же "избыточное цитирование") и запрещено правилами форума!
Serge_Bliznykov вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Две задачки strannik23 Паскаль, Turbo Pascal, PascalABC.NET 0 05.04.2011 10:53
Две задачки Scooby_Doo Паскаль, Turbo Pascal, PascalABC.NET 4 16.12.2010 20:32
две задачки agressenok Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 8 04.12.2010 15:08
две задачки. kardinal94 Помощь студентам 1 01.12.2010 11:52
две задачки на С# Bobrik Помощь студентам 0 01.06.2009 23:50