• Добро пожаловать на компьютерный форум Tehnari.ru. Здесь разбираемся с проблемами ПК и ноутбуков: Windows, драйверы, «железо», сборка и апгрейд, софт и безопасность. Форум работает много лет, сейчас он переехал на новый движок, но старые темы и аккаунты мы постарались сохранить максимально аккуратно.

    Форум не связан с магазинами и сервисами – мы ничего не продаём и не даём «рекламу под видом совета». Отвечают обычные участники и модераторы, которые следят за порядком и качеством подсказок.

    Если вы у нас впервые, загляните на страницу о форуме и правила – там коротко описано, как задать вопрос так, чтобы быстро получить ответ. Чтобы создавать темы и писать сообщения, сначала зарегистрируйтесь, а затем войдите под своим логином.

    Не знаете, с чего начать? Создайте тему с описанием проблемы – подскажем и при необходимости перенесём её в подходящий раздел.
    Задать вопрос Новые сообщения Как правильно спросить
    Если пришли по старой ссылке со старого Tehnari.ru – вы на нужном месте, просто продолжайте обсуждение.

Добрый день, прошу помощи в решении задачи на массивы

  • Автор темы Автор темы Tenken
  • Дата начала Дата начала

Tenken

Banned
Регистрация
18 Ноя 2012
Сообщения
11
Реакции
0
Баллы
0
Добрый день, прошу помощи в решении задачи на массивы

Если элементы массива расположены по возрастанию, то после первого положительного элемента вставить элемент равный сумме всех элементов массива, в противном случае рассортировать элементы массива по возрастанию.
 
Так как вы не указали язык программирования, даю алгоритм решения в общем виде:
Сначала заполняем массив значениями
Потом определяем, отсортирован ли массив по возрастанию, для этого в цикле сравниваем попарно рядом стоящие элементы массива. Тут же можно подсчитывать и сумму всех элементов. Если в парах все последующие элементы больше всех предыдущих - переходим к поиску первого положительного элемента и следующему за ним присваиваем значение подсчитанной суммы; если же хоть одна пара элементов массива не соответствует критерию "по возрастанию" - переходим к сортировке массива по возрастанию. Так как вы не указали метод сортировки, то можно воспользоваться наиболее популярным - "пузырьковой сортировкой".
 
Так как вы не указали язык программирования
Да уж - сдерживаюсь из последних сил, чтобы не начать попросту удалять запросы без указания языка программирования. До чего надоело! Потому что воспринимаю подобные сообщения прежде всего, как свидетельство неуважения, если не сказать наплевательского отношения к нам.
Но пока держусь.
 
прошу прощения на паскале
 
Не вижу вашего прощения на паскале :))
 
Извините=) Я просто уже второй день её делаю и никак не приду к результату вот и нуждаюсь в помощи профессионалов)
 
прошу прощения на паскале
Тогда, прошу прощения, но, например, так:
Код:
Const
 N=24;

Type
 Ar=Array[1..N+1] of Integer;

Var
 A:Ar;
 i:Integer;
 b:boolean;

Procedure Work_with_Array(B:Ar;var B1:Ar; Var Bb:boolean);
var
 bb1:boolean;
 Ib,Jb:Byte;
 Sum,D:Integer;
begin
 Sum:=0;
 bb1:=true;
 Jb:=0;
 For Ib:=1 to N-1 do
  begin
   Inc(Sum,B[Ib]);
   If B[Ib]>B[Ib+1] then bb1:=false;
   If (B[Ib]>0) and (Jb=0) then Jb:=Ib;
  end;
 If bb1 then
  begin
   Inc(Sum,B[N]);
   For Ib:=N downto Jb+1 do B[Ib+1]:=B[Ib];
   B[Jb+1]:=Sum;
  end
 else
  For Ib:=1 to N-1 do
   For Jb:=1 to N-Ib do
    If B[Jb]>B[Jb+1] then
     begin
      D:=B[Jb];
      B[Jb]:=B[Jb+1];
      B[Jb+1]:=D;
     end;
 B1:=B;
 bb:=bb1;
end;

Begin
 Randomize;
 Writeln('Var_1 (ordered array)');
 Writeln;
 Writeln('Initial array:');
 For i:=1 to N do
  begin
   A[i]:=i-(N div 4);
   Write(A[i]:4);
  end;
 Writeln;
 Writeln('Array after processing:');
 Work_with_Array(A,A,b);
 If b then
 For i:=1 to N+1 do Write(A[i]:4);
 Writeln;
 Writeln;
 Writeln;
 Writeln('Var_2 (disordered array)');
 Writeln;
 Writeln('Initial array:');
 For i:=1 to N do
  begin
   A[i]:=-(N div 4)+Random(N);
   Write(A[i]:4);
  end;
 Writeln;
 Writeln('Array after processing:');
 Work_with_Array(A,A,b);
 If not(b) then
 For i:=1 to N do Write(A[i]:4);
 Readln;
End.
 
Спасибо большое за помощь, но дело в том, что операцию Procedure я не проходил, а наш преподаватель очень придирчив к тому что если я решу задачу с помощью операций, которые мы не проходили она не зачтёт работу к сожалению=(
 
А и ещё с помощью булевого типа мы задачи тоже не решали, так что это она точно не зачтёт(
 
Если что я ещё зелёный в этом так что пока не могу решать без помощи задачи такой сложности( как и вся моя группа)(((
 
Vladimir_S а не могли бы вы посмотреть вот я тут с помощью одного человека решил вот так, это правильно?

const n = 100;
var
a:array[1..n]of integer;
i,j,b,c,e:integer;
begin
readln(b);
for i:=1 to b do begin
readln(a);
if (a>0) and (c=0) then c:=i;
end;
for i:=1 to b-1 do
for j:=i to b do
if a>a[j] then begin c:=a; a:=a[j]; a[j]:=c; e:=e+1;end;
if e<>0 then for i:=1 to b do write(a,' '); writeln;
j:=0;
for i:=1 to b do j:=j+a;
if e=0 then begin a[c+1]:=j; writeln(a[c+1]);end;
end.
 
Да вроде можно и так. Пара-тройка мелких замечаний.

1. "Слепой" ввод чисел ну очень неудобен. Куда, на мой взгляд, приятнее и удобнее, если на экране появляются подсказки. Поэтому вместо

readln(b);
for i:=1 to b do begin
readln(a);
if (a>0) and (c=0) then c:=i;
end;

я бы написал

write('b= ');
readln(b);
for i:=1 to b do begin
write('a[',i,']= ');
readln(a);
if (a>0) and (c=0) then c:=i;
end;

2. Можно, конечно, полагаться на то, что по умолчанию переменным присвоены нулевые значения, но я бы не стал: не все трансляторы это делают. А потому добавил бы в нужных местах

c:=0; и e:=0;

3. Если перед финальным "end." добавить (как у меня сделано) пустой "readln;", то программа остановится (до нажатия "Enter") и позволит прочитать выведенные на экран данные.
 
Tenken, не смешите народ сказками, что вы не проходили логический тип. К вашему сведению, язык программирования Pascal как один из вариативных, по школьной программе изучают в 9 классе средней школы. Так что вы вполне можете упирать на этот факт в разговоре с вашим преподавателем.
 
Я понял вашу задачу только не могли бы вы подсказать я бы хотел вручную вводить элементы массива, а не так чтобы они случайно выводились.
 
Vladimir_S а не могли бы вы посмотреть вот я тут с помощью одного человека решил вот так, это правильно?
Я понял вашу задачу только не могли бы вы подсказать я бы хотел вручную вводить элементы массива, а не так чтобы они случайно выводились.
Ну здрасьте, я ваша тётя! Уважаемый "автор", пусть даже и "с помощью одного человека", даже не понял, что выложил именно такой вариант - с вводом данных с консоли! Цирк, да и только!
 
Всё задача выполнена всем большое спасибо, извините за тупизм не судите строго не очень я пока разбираюсь, я в школе не учил паскаль, т.к. в 9 классе учитель информатики в декрет ушла и поэтому пропущено всё было, вот почему и туплю, но ничего наверстаю упущенное и буду решать задачи как надо, ещё раз извините!=)
 
Назад
Сверху