Студопедия

КАТЕГОРИИ:


Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748)

Билет № 12. Написать программу на поиск элементов массива по заданному условию




Pascal

QBasic

Pascal

QBasic

Написать программу на поиск элементов массива по заданному условию. Произвести ввод и отладку программы. Проанализировать полученный результат

Пример 1. В произвольном линейном массиве найти первый по порядку элемент, равный заданному числу x.

Решение. Просматриваем массив до тех пор, пока не будет найден указанный элемент или не будет просмотрен весь массив.

DECLARE SUB Vvod (N!, A!())

DECLARE SUB Vivod (N!, A!())

DECLARE SUB poisk (N!, A!(), x, p!)

DIM A(20), N, x AS INTEGER

RANDOMIZE TIMER - 32767

PRINT "N? ": INPUT N

CALL Vvod(N, A())

CALL Vivod(N, A())

PRINT "Что ищем? ": INPUT x

CALL poisk(N, A(), x, p)

IF p = 0 THEN

PRINT "No"

ELSE

PRINT "Номер: "; p

END IF

SUB poisk (N, A(), x, p)

i = 1

p = 0

WHILE (i <= N) AND (p = 0)

IF A(i) = x THEN p = i

i = i + 1

WEND

END SUB

SUB Vivod (N, A())

FOR i = 1 TO N

PRINT USING "####"; A(i);

NEXT i

PRINT

END SUB

SUB Vvod (N, A())

FOR i = 1 TO N

A(i) = -10 + INT(RND(1) * 20)

NEXT i

END SUB

Program Find;

Type arr=array[1..20] of integer;

Procedure Vvod(n: byte; var a: arr);

Var i: byte;

Begin

For i:= 1 to n do

A[i]:= -10 + random(20)

End;

Procedure Vivod(n: byte; const a: arr);

Var i: byte;

Begin

For i:= 1 to n do

Write(a[i]:4);

Writeln

End;

Procedure poisk(n: byte; const a: arr; x: integer; var p: byte);

Var i: byte;

Begin

i:= 1; p:= 0;

while (i <= n) and (p = 0) do begin

if a[i] = x then p:= i;

i:= i + 1

end;

End;

Var a: arr; x: integer; n, p: byte;

Begin

Randomize;

Write('n?'); readln(n);

Vvod(n, a);

Vivod(n, a);

Write('Что ищем?'); readln(x);

Poisk(n, a, x, p);

If p = 0 then writeln('Элемент не найден')

else writeln('номер элемента: ', p)

End.

C++

#include <iostream.h>

#include <stdlib.h>

#include <time.h>

void Vvod(int n, int a[20]);

void Vivod(int n, int a[20]);

void Poisk(int n, int a[20], int x, int &p);

void main()

{int n, a[20], x, p;

cout << "Сколько элементов в массиве? ";

cin >> n;

randomize();

Vvod(n, a);

Vivod(n, a);

cout << "Что ищем?";

cin >> x;

Poisk(n, a, x, p);

if (!p) cout << "Элемент не найден";

else cout << "номер элемента: " << p;

}

void Vvod(int n, int a[20])

{ int i;

for (i = 1; i <= n; i++)

a[i] = -10 + random(20);

}

void Vivod(int n, int a[20])

{ int i;

for (i = 1; i <= n; i++)

{cout.width(4); cout << a[i];}

}

void Poisk(int n, int a[20], int x, int &p)

{ int i;

p = 0;

for (i = 1; i <= n &&!p; i++)

if (a[i] == x) p = i;

}

Пример 2. В отсортированном линейном массиве найти элемент, равный заданному числу x.

Решение. Воспользуемся алгоритмом бинарного поиска. Для этого выделим средний элемент массива. По сравнению с x средний элемент может быть: больше x (в этом случае поиск продолжается в левой части массива); меньше x (в этом случае поиск продолжается в правой части массива); равен x (в этом случае поиск завершается). В первом и втором случае поиск продолжаем по той же схеме.

Кроме совпадения некоторого элемента массива с заданным x поиск прекращается, если левая граница участка поиска станет больше, чем правая, что означает, что элемент в массиве отсутствует.

DECLARE SUB Vvod (N!,A() AS INTEGER)

DECLARE SUB Vivod (N!,A() AS INTEGER)

DECLARE SUB Bpoisk (N!,A() AS INTEGER,x,p!)

DIM A(20) AS INTEGER

RANDOMIZE TIMER - 32767

PRINT "N? ": INPUT N

CALL Vvod(N, A())

CALL Vivod(N, A())

PRINT "Что ищем? ": INPUT x

CALL Bpoisk(N, A(), x, p)

IF p = 0 THEN

PRINT "No"

ELSE

PRINT "Номер: "; p

END IF

SUB Bpoisk (N, A() AS INTEGER, x, c)

L = 1: R = N

DO

c = INT((L + R) / 2)

IF A(c) > x THEN R = c - 1

IF A(c) < x THEN L = c + 1

LOOP WHILE (L <= R) AND (A(c) <> x)

IF A(c) <> x THEN c = 0

END SUB

SUB Vivod (N, A() AS INTEGER)

FOR i = 1 TO N

PRINT USING "####"; A(i);

NEXT i

PRINT

END SUB

SUB Vvod (N, A() AS INTEGER)

A(1) = -20 + INT(RND(1) * 20)

FOR i = 2 TO N

A(i) = A(i - 1) + INT(RND(1) * 6)

NEXT i

END SUB

Program Find;

Type arr = array[1..20] of integer;

Procedure Vvod(n: byte; var a: arr);

Var i: byte;

Begin

A[1]:= -20 + random(20);

For i:= 2 to n do

A[i]:= A[i - 1] + random(6)

End;

Procedure Vivod(n: byte; const a: arr);

Var i: byte;

Begin

For i:= 1 to n do

Write(a[i]:4);

Writeln

End;

Procedure bpoisk(n: byte; const a: arr;

x: integer; var C: byte);

Var L,R: byte;

Begin

L:= 1; R:= n;

Repeat

C:= (L + R) div 2;

If A[C] > x then R:= c - 1;

If A[C] < x then L:= c + 1

Until (L > R) or (A[c] = x)

If A[C] <> x then C:= 0

End;

Var a: arr; x: integer; n, p: byte;

Begin

Randomize;

Write('n? '); readln(n);

Vvod(n, a);

Vivod(n, a);

Write('Что ищем? '); readln(x);

BPoisk(n, a, x, p);

If p = 0 then

writeln('Элемент не найден') else

writeln('номер элемента: ', p)

End.

C++

#include <iostream.h>

#include <stdlib.h>

#include <time.h>

void Vvod(int n, int a[20]);

void Vivod(int n, int a[20]);

void BPoisk(int n, int a[20], int x, int &c);

void main()

{int n, a[20], x, p;

cout << "Сколько элементов в массиве? ";

cin >> n;

randomize();

Vvod(n, a);

Vivod(n, a);

cout << " Что ищем?";

cin >> x;

BPoisk(n, a, x, p);

if (!p) cout << "Элемент не найден";

else cout << "номер элемента: " << p;

}

void Vvod(int n, int a[20])

{ int i;

a[1] = -20 + random(20);

for (i = 2; i <= n; i++)

a[i] = a[i - 1] + 1 + random(6);

}

void Vivod(int n, int a[20])

{ int i;

for (i = 1; i <= n; i++)

{cout.width(4); cout << a[i];}

cout << endl;

}

void BPoisk(int n, int a[20], int x, int &c)

{ int L, R;

L = 1; R = n;

do

{c = (L + R)/2;

if (a[c] > x) R = c - 1;

if (a[c] < x) L = c + 1;}

while (L <= R && a[c]!= x);

if (a[c]!= x) c = 0;

}

Варианты заданий

Написать программу на поиск элементов массива по заданному условию. Произвести ввод и отладку программы. Проанализировать полученный результат.

1. Даны действительные числа a 1, a 2,..., an. Поменять местами наибольший и наименьший элементы.

2. Задана последовательность из N вещественных чисел. Определить, сколько чисел меньше K, равно K и больше K.

3. Определить количество элементов последовательности натуральных чисел, кратных числу M и заключенных в промежутке от L до N.

4. Определить, сколько процентов от всего количества элементов последовательности целых чисел составляют нечетные элементы.

5. В массиве целых чисел с количеством элементов n найти наиболее часто встречающееся число. Если таких чисел несколько, то определить наименьшее из них.




Поделиться с друзьями:


Дата добавления: 2015-04-23; Просмотров: 680; Нарушение авторских прав?; Мы поможем в написании вашей работы!


Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет



studopedia.su - Студопедия (2013 - 2024) год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! Последнее добавление




Генерация страницы за: 0.032 сек.