Как найти положительный массив

Надо найти второй положительный элемент массива. Вот мои наработки:

program summa;
var
  a: array [1..100] of integer;
  i, sum, n: integer;
begin
  Randomize;
  Write('Введите размер массива: ');
  Readln(n);
  Writeln('Массив:');
  for i := 1 to n do
  begin
    a[i] := Random(20) - random(17);
    Write(a[i]:4);
  end;
  Writeln;
  sum:=0;
  for i := 1 to n do
///решение
end.

введите сюда описание изображения

Kromster's user avatar

Kromster

13.5k12 золотых знаков43 серебряных знака72 бронзовых знака

задан 22 июн 2018 в 7:26

adam_k's user avatar

4

    program HelloWorld;
var
  a: array [1..100] of integer;
  i, sum, n, k: integer;
begin
  Randomize;
  k:=0;sum:=0;
  Write('Введите размер массива: ');
  Readln(n);
  Writeln('Массив:');
  for i := 1 to n do
  begin
    a[i] := Random(0) - random(20);
    if a[i] > 0 then begin inc(k);
    if k = 2 then sum := a[i]; end;
    Write(a[i]:4);
  end;
  writeln;
  case k of
      0: Writeln('Нет положительных элементов');
      1: Writeln('Нет второго положительного элемента');
      else Writeln('Второй положительный элемент : ',sum);
  end;
end.

ответ дан 22 июн 2018 в 7:34

Aleksandr H.'s user avatar

5

0 / 0 / 0

Регистрация: 21.11.2018

Сообщений: 9

1

Найти минимальный положительный элемент массива

21.11.2018, 11:31. Показов 13200. Ответов 4


Студворк — интернет-сервис помощи студентам

1. Дан массив А (15). Найти минимальный положительный элемент массива.
Надо написать как можно проще



0



Котовчанин

942 / 482 / 200

Регистрация: 16.02.2010

Сообщений: 3,338

Записей в блоге: 37

21.11.2018, 12:16

2

Marty321, а в массиве могут быть отрицательные числа?



0



FFPowerMan

2019 / 1123 / 475

Регистрация: 11.10.2018

Сообщений: 5,727

21.11.2018, 12:26

3

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
//---------------------------------------------------------------------------
#include <vcl>
#include <iostream>
#include <limits>
#pragma hdrstop
//---------------------------------------------------------------------------
#pragma argsused
using namespace std;
 
int main()
{
  srand(time(0));
  int A[15], n, Min = numeric_limits<int>::max();
 
  cout << "Massiv A:n";
  for(n = 0; n < 15; n++)
  {
      A[n] = rand()%31 - 15;
      cout << A[n] << " ";
  }
 
  for(n = 0; n < 15; n++)
      if((A[n] >= 0) && (A[n] < Min))
          Min = A[n];
 
  cout << "nMin = " << Min << "n";
  system("pause");
  return 0;
}



0



Yetty

7427 / 5021 / 2891

Регистрация: 18.12.2017

Сообщений: 15,694

21.11.2018, 15:18

4

Лучший ответ Сообщение было отмечено Marty321 как решение

Решение

для такой задачи используйте массив типа double — элементы массива не обязательно целые числа

Marty321,

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#include <iostream>
using namespace std;
 
int main()
{
    int k=0;
    const int n=15;
    double A[n], min=0.0;  
    
    cout <<"Enter "<<n<<" elements:n";
    for (int i = 0; i < n; i++)
    {
        cin >> A[i];
        if (A[i] > 0.0) k++;
        if (A[i] > 0.0 && (k==1 || A[i]<min)) min=A[i];        
    }    
    cout <<"min_positive="<<min<< endl;    
system("pause");
return 0;
}



1



Тамика

Котовчанин

942 / 482 / 200

Регистрация: 16.02.2010

Сообщений: 3,338

Записей в блоге: 37

21.11.2018, 15:21

5

Цитата
Сообщение от Marty321
Посмотреть сообщение

Надо написать как можно проще

C++
1
2
3
4
5
6
int main()
{
    std::vector<int> v{ 1, 2, 3, -6, 1, 55, 9, -1, 44 };
    auto end = std::remove_if(v.begin(), v.end(), [](int n) { return n < 0; });
    std::cout << *std::min_element(v.begin(), end);
}



0



Большинство задач на обработку массива сводятся к комбинированию следующих алгоритмов:

  • Заполнение
    • Заполнение случайными числами.
    • Использование в формуле заполнения индекса элемента.
    • Использование рекуррентного соотношения.
  • Анализ
    • Задачи подсчета — нахождение суммы или количества  элементов таблицы, обладающих заданным свойством.
    • Нахождение минимального или максимального среди элементов массива.
    • Задачи, в которых требуется найти какие-то характеристики массива.
  • Поиск
  • Перестановка
    • Задачи, в которых требуется поменять местами элементы массива.
    • Задачи циклической перестановки.
    • Задачи сортировки элементов массива.
  • Некоторые свойства элементов массива
  • Задачи поиска

         Основной вопрос задач поиска — где в массиве находится элемент, обладающий нужным свойством. При этом свойство должно быть абсолютным: для определения пригодности элемента достаточно знать только этот элемент. Большинство задач поиска сводится к задаче — найти в массиве элемент с заданным значением.

Некоторые свойства элементов массива

Свойство

Запись свойства

четные a[i] mod 2 = 0

нечетные     

a[i] mod 2 <> 0

кратные k     

a[i] mod k = 0

некратные k

a[i] mod k <> 0

 на четных местах    

i mod 2 = 0

запись числа заканчивается на цифру k a[i] mod 10=k

на нечетных местах   

i mod 2 <> 0

положительные

a[i] > 0

неотрицательные 

a[i] >= 0

меньше х1 или больше х2 (a [i]<x1) or (a [i]>x2)

в интервале (х1; х2)  

(a [i]>x1) and (a [i]<x2)


Задача 1. Найти номер первого по счету положительного элемента массива.

Использование цикла с параметром (.pas)

Исходные данные: массивa, содержащий n вещественных чисел.
Результат: k номер первого положительного элемента массива .
Метод решения:
— просматриваем массив с конца, если находим положительный элемент, то переменной k присваиваем номер данного положительного элемента;
— если находим положительный элемент с меньшим номером, то меняем значение переменной k;
— если значение k осталось равным 0, то положительных элементов в данном массиве нет.
.

  program z;
         const n=30;
         type mas= array [1..n] of real;
         var a: mas;
               i, k: integer;
begin
         k:=0;
         for i:=1 to n do read (a[i]);
         for i:=n downto 1 do
                                    if a[i]>0 then k:=i;
         if k=0 then writeln (‘положительных элементов нет’)
                   else writeln(k);
end.

Использование цикла с постусловием (.pas)

Исходные данные: массивa, содержащий n вещественных чисел.
Результат: k номер первого положительного элемента массива .
Метод решения:
— просматриваем массив, начиная с первого элемента, если находим положительный элемент, то переменной k присваиваем номер данного положительного элемента;
-работа цикла заканчивается, если значение k изменилось или если просмотрен весь массив;
— если значение k осталось равным 0, то положительных элементов в данном массиве нет.
  program z;
         const n=5;
         type mas= array [1..n] of real;
         var a: mas;
               i,k: integer;
begin
         for i:=1 to n do read (a[i]);
         k:=0;
         i:=0;
         repeat
                  i:=i+1;
                  if a[i]>0 then k:=i;
         until (k>0) or (i=n);
         if k=0 then writeln (‘положительных элементов нет’)
                  else writeln(k);
end.

Использование цикла с предусловием (.pas)

Исходные данные: массивa, содержащий n вещественных чисел.
Результат: k номер первого положительного элемента массива .
Метод решения:
— просматриваем массив: если текущий элемент неположительный и i < n, то значение переменной i увеличиваем на 1, иначе если текущий элемент положительны, то переменной k присваиваем номер данного положительного элемента;
— если значение k осталось равным 0, то положительных элементов в данном массиве нет.
  program z;
         const n=7;
         type mas= array [1..n] of real;
         var a: mas;
         i,k: integer;
begin
         for i:=1 to n do read (a[i]);
         k:=0;
         i:=1;
         while (a[i]<=0) and (i<n) do i:=i+1;
         if a[i]>0 then k:=i;
         if k=0 then writeln (‘положительных элементов нет’)
                   else writeln(k);
end.

 Вопросы:

К началу страницы

Фрагмент программы

Блок — схема

1

Вычисление суммы всех элементов массива
sum:=0;
for i:=1 to n do sum:=sum+x[i];

2

Вычисление среднего арифметического чётных элементов массива
sum:=0;
kol:=0;
for i:=1 to n do begin
sum:=sum+a[i];
kol:=kol + 1;
end;
if kol=0 then writeln (‘чётных чисел нет’)
else writeln (‘среднее чётных чисел равно’, sum/kol);

 
3

Найти произведение всех элементов массива
pr:=1;
for i:=1 to n do pr:=pr*a[i];

 
4

Количество четных элементов массива
kol:=0;
for i:=1 to n do
if (a[i] mod 2=0) then kol:=kol+1;

 
5

Удвоить все положительные элементы массива, и поменять знак у остальных
for i:=1 to n do
if  a[i]>0 then a[i]:=a[i]*2
else a[i]:=-a[i];

 
6

Перестановка всех элементов массива в обратном порядке
for i:=1 to n div 2  do
begin
k:=x[i];
x[i]:=x[n+1-i];
x[n+1-i]:=k;
end;

 
7

Перестановка соседних элементов массива
for i:=1 to n div 2 do
begin
k:=x[2*i-1];
x[2*i-1]:=x[2*i];
x[2*i]:=k;
end;

 
8

Обмен половин массива
k:=n div 2;
for i:=1 to n div 2 do
begin
c:=a[i];
a[i]:=a[k+i];
a[k+i]:=c;
end;

 
9

Проверить, есть ли в массиве четные числа
kol:=0;
for i:=1 to n do
if a[i] mod 2 = 0 then kol:=kol+1;
if kol=0 then writeln (‘нет четных’)
else writeln (‘есть четные’);

 
10

Проверить, что массив упорядочен строго по возрастанию
flag:=0;
for i:=1 to n-1 do
if a[i]>a[i+1] then flag:=flag+1;
if flag=0 then writeln (‘ упорядочен ’)
else writeln (‘неупорядочен ’);

 
11

Поиск максимального элемента массива (границы изменения значений элементов массива неизвестны)
max:=a[1];
for i:=2 to n do 
if a[i]>max then max:=a[i];
write(‘максимальный элемент max= ‘, max);
end.

 
12

Значения элементов массива принадлежат промежутку от -500 до 500. Найти максимальный элемент массива.
max:=-501;
for i:=1 to n do
if a[i]>max then max:=a[i];

 
13

Поиск количества элементов произвольного массива равных максимальному
max:=a[1];
nmax:=1;
for i:=2 to n do
if  a[i] > max then begin
max:=a[i];
nmax:=1;
end
else
if a[i]=max then
nmax:=nmax+1;

 
14

Найти номер максимального элемента массива, если он единственный, или количество максимальных элементов, если их несколько.
max:=a[1];
nmax:=1;
for i:=2 to n do
if  a[i] > max then begin
max:=a[i];
nmax:=1;
j:=i;
end
else
if a[i]=max then
nmax:=nmax+1;
if nmax=1 then writeln(‘j=‘,j) else writeln (‘nmax=‘, nmax);

 
15 Поиск второго по величине максимального элемента массива
max:=a[1];
max2:=a[2];
if max<max2 then begin
max:=a[2];
max2:=a[1];
end;
for i:=3 to n do
if a[i]>max then begin
max2:=max;
max:=a[i];
end
else if a[i]>max2 then max2:=a[i];
 
16

Поиск номера максимального элемента
imax:=1;
for i:=2 to n do
if a[i]>a[imax] then imax:=i;

 
17

Значения элементов массива принадлежат диапазону от – 500 до 500. найти максимальный отрицательный элемент массива. Гарантируется, что отрицательные  элементы есть.
max:=-501;
for i:=1 to n do
if (a[i]<0) and (a[i]>max) then max:=a[i];

 
18

Номера двух элементов массива наименее отличающихся друг от друга
const N=7;
var a:array [1..N] of integer;
i,j,min,min2,s:integer;
begin
for i:=1 to N do read (a[i]);
s:=abs(a[1]-a[2]);
min:=1;
min2:=2;
for i:=1 to N -1 do
for j:=i+1 to N do
if abs(a[i]-a[j])<s then begin
s:=abs(a[i]-a[j]);
min:=i;
min2:=j;
end;
writeln(‘номера двух элементов массива наименее отличающихся друг от друга:’,min,’и’, min2);
end.

 
19

Номера двух последовательных элементов массива наименее отличающихся друг от друга
const N=7;
var a:array [1..N] of integer;
i,j,min,min2,s:integer;
begin
for i:=1 to N do read (a[i]);
s:=abs(a[1]-a[2]);
min:=1;
min2:=2;
for i:=1 to N -1 do
if abs(a[i]-a[i+1])<s then begin
s:=abs(a[i]-a[i+1]);
min:=i;
min2:=i+1;
end;
writeln(‘номера двух соседних элементов наименее отличающихся друг от друга:’,min,’и’, min2);
end.

 

Задача 1 (..pas) Дан целочисленный массив из 30 элементов. Элементы могут принимать значения от 0 до 100 ­– баллы, полученные на ЕГЭ. Опишите на русском языке или на одном из языков программирования алгоритм, который подсчитывает и выводит средний балл учащихся, сдавших экзамен (получивших оценку более 20 баллов). Гарантируется, что хотя бы один ученик в классе успешно сдал экзамен. Исходные данные объявлены так, как показано ниже. Использовать другие переменные запрещается.

const N = 30;
var A: array[1..N] of integer;
i, x, y: integer;
s: real;
begin
for i:=1 to N do readln(A[i]);

end.

Задача 2 (..pas) Дан целочисленный массив из 30 элементов. Элементы массива могут принимать целые значения от 0 до 100 – баллы учащихся выпускного класса за итоговый тест по информатике. Для получения положительной оценки за тест требовалось набрать не менее 20 баллов. Опишите на русском языке или на одном из языков программирования алгоритм, который находит и выводит минимальный балл среди учащихся, получивших за тест положительную оценку. Известно, что в классе хотя бы один учащийся получил за тест положительную оценку. Исходные данные объявлены так, как показано ниже. Запрещается использовать переменные, не описанные ниже, но разрешается не использовать часть из них.

 

const N=30;
var a: array [1..N] of integer;
    i, j, min: integer;
begin
  for i:=1 to N do readln(a[i]);
  …

end.

Задача
3
(.pas)
Дан массив, состоящий из 30 вещественных чисел. Вычислить сумму всех элементов. Массив вводится с клавиатуры.
а)  Наберите программу или воспользуйтеть файлом .pas, заменив многоточие  на необходимые команды:
Program z;
Const n=5;
type mas=array[1..n] of real;  
var a: mas;
s: real;
i: integer;
begin
for i:=…….. to …….  do
begin
writeln (‘введите элемент массива’);
………………….;
S:=S+…….. ;
end;
writeln (‘ Сумма равна’,…….);
End.

б)  запустите данную программу и посмотрите результат её работы.

Задача
4.
Дан массив целых чисел.
а) каждый положительный элемент, заменить на его квадрат;
б) выяснить, верно ли, что максимальный элемент больше среднего арифметического на 5.

Задача
5
(.pas)
Дан целочисленный массив из 20 элементов. Элементы массива могут принимать целые значения от 0 до 1000. Опишите на русском языке или на одном из языков программирования алгоритм, позволяющий найти и вывести минимальное значение среди элементов массива, которые имеют чётное значение и не делятся на три. Гарантируется, что в исходном массиве есть хотя бы один элемент, значение которого чётно и не кратно трем. Исходные данные объявлены так, как показано ниже. Запрещается использовать переменные, не описанные ниже, но использовать все описанные переменные не обязательно.

const
N = 20;
var
a: array [1..N] of integer;
i, j, min: integer;
begin
for i := 1 to N do
readln(a[i]);
……….
end.

найти первый и второй положительный элемент массива

как с помощью цикла while найти первый и второй положительный элемент массива

const
   N = 10;

var
   a: array [1..N] of integer;
   i: integer;
   i1, i2: integer;

begin
   {init random}
   for i:=1 to N do a[i]:=random(100)-50;
   
   write('array: ');
   for i:=1 to N do write(a[i]:4);
   writeln;
   

   i1 := 0;
   i2 := 0;

   i := 1;
   while (i1 = 0) or (i2 = 0) do begin
      if a[i] > 0 then begin
         if i1 = 0 then begin
            i1 := i;
         end else begin
            if i2 = 0 then begin
               i2 := i;
            end;
         end
      end;
      inc(i);
      if (i > N) then begin
         break;
      end
   end;
   
   if i1 > 0 then begin
      writeln('first positive element: a[', i1, '] = ', a[i1]);
      if i2 > 0 then begin
          writeln('second positive element: a[', i2, '] = ', a[i2]);
      end else begin
          writeln('no second positive element');
      end;
   end else begin
      writeln('no positive element at all!');
   end;
   
end.

вывод

array:   45 -22 -15  32  -9   9  29   3 -26 -49
first positive element: a[1] = 45
second positive element: a[4] = 32

Формулировка задачи:

В лабе требуется найти произведение элементов массива с чётными номерами записать на место второго положительного элемента.
Как найти второй положительный элемент?

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
 
namespace laba2_mass
{
    class Program
    {
        public const int n = 10;
 
        public static void Main()
        {
            int[] a = new int[n];
            int i, idx1 = 0, idx2 = 0, p = 1;
 
            Console.WriteLine("Массив");
 
            Random rand = new Random();
            for (i = 0; i < n; i++)
            {
                a[i] = rand.Next(-10, 10);
 
                Console.Write(a[i] + " ");
            }
 
            Console.WriteLine();
            Console.WriteLine();
 
            //============================//
 
            for (i = 0; i < n; i++)
            {
                if(i == 1 || i == 3 || i == 5 || i == 7 || i == 9)
                    p *= a[i];
            }
 
            Console.WriteLine("p = " + p + "n");
 
            //============================//
 
            for (i = 0; i < n; i++)
            {
                if (a[i] > 0)
                {
                    if (idx1 == 0)
                    {
                        idx1 = i;
                    }
 
                    if (idx1 < i)
                    {
                        idx2 = i;
                    }
                }
            }
 
            Console.WriteLine("a[idx1] = " + a[idx1] + "n");
 
            Console.WriteLine("idx1 = " + idx1 + "n");
 
            Console.WriteLine("a[idx2] = " + a[idx2] + "n");
 
            Console.WriteLine("idx2 = " + idx2 + "n");
 
            //===========================//
 
            for (i = 0; i < n; i++)
            {
                if (i == idx2)
                {
                    a[idx2] = p;
                }
 
                Console.Write(a[i] + " ");
            }
 
            Console.WriteLine();
 
            Console.ReadKey();
        }
    }
}

P.S. В этом коде оно записывает произведение вместо последнего положительного

Код к задаче: «Как найти второй положительный элемент массива?»

textual

int multiplication =1;
            int wtf = 0;
            int[] massiv = new int[10];
            Random rnd = new Random();
            bool a = false;
            bool b = true;//если начинаем с четного элемента
            for (int i = 0; i < massiv.Length; i++)
            {                
                massiv[i] = rnd.Next(-10, 10);
                if (massiv[i] > 0 && a == true)
                    wtf = i;
                if (massiv[i] > 0)
                    a = true;
                if(b){
                    multiplication *= massiv[i];
                    b=false;}
                else
                    b=!b;  
            }
            
                massiv[wtf] = multiplication;
            Console.WriteLine("2 положительный элемент  массива = {0}",massiv[2]);
//Кривовато, но пишет вместо второго. А вообще генерация нуля все портит.

Полезно ли:

13   голосов , оценка 3.846 из 5

Понравилась статья? Поделить с друзьями:
  • Лабораторная работа как найти коэффициент трения
  • Как исправить скрученный ноготь на руках
  • Арк кетцалькоатль как найти
  • Как найти массу зная только температуру
  • Как исправить ошибку 621