Массивы в Паскале. Одномерные массивы

Предположим, что программа работает с большим количеством однотипных данных. Скажем около ста разных целых чисел нужно обработать, выполнив над ними те или иные вычисления. Как вы себе представляете 100 переменных в программе? И для каждой переменной нужно написать одно и тоже выражение вычисления значения? Это очень неэффективно.

Есть более простое решение. Это использование такой структуры (типа) данных как массив. Массив представляет собой последовательность ячеек памяти, в которых хранятся однотипные данные. При этом существует всего одно имя переменной связанной с массивом, а обращение к конкретной ячейке происходит по ее индексу (номеру) в массиве.

Нужно четко понимать, что индекс ячейки массива не является ее содержимым. Содержимым являются хранимые в ячейках данные, а индексы только указывают на них. Действия в программе над массивом осуществляются путем использования имени переменной, связанной с областью данных, отведенной под массив.

Итак, массив – это именованная группа однотипных данных, хранящихся в последовательных ячейках памяти. Каждая ячейка содержит элемент массива. Элементы нумеруются по порядку, но необязательно начиная с единицы (хотя в языке программирования Pascal чаще всего именно с нее). Порядковый номер элемента массива называется индексом этого элемента.

Помним, все элементы определенного массива имеют один и тот же тип. У разных массивов типы данных могут различаться. Например, один массив может состоять из чисел типа integer, а другой – из чисел типа real.

Индексы элементов массива обычно целые числа, однако могут быть и символами, а также описываться другими порядковыми типами. Т.е. для индекса можно использовать тип, в котором определена дискретная последовательность значений, и все эти значения можно пересчитать по порядку. Индексировать можно как константами и переменными, так и выражениями, результат вычисления которых дает значение перечислимого типа.

Если индекс массива может приобретать все допустимые значения определенного перечислимого типа, то при описании массива возможно задание имени типа вместо границ изменения индекса. При этом границами индекса будут первое и последнее значения в описании типа индекса. Границы изменения индексов могут задаваться с помощью ранее объявленных констант. Рекомендуется предварительно объявлять тип массива в разделе описания типов.

Массив можно создать несколькими способами.

const n = 200;
type
        months = (jan, feb, mar, apr, may, jun, jul, aug, sep, oct, nov, dec);
        years = 1900..2100;
        people = array[years] of longint;
var
        growth: array[months] of real;
        hum: people;
        notes: array[1..n] of string;

Обращение к определенному элементу массива осуществляется путем указания имени переменной массива и в квадратных скобках индекса элемента.

Простой массив является одномерным. Он представляет собой линейную структуру.

var ch: array [1..11] of char;
    h: char;
    i: integer;
 
begin
    for i := 1 to 11 do read (ch[i]);
 
    for i := 1 to 11 do write (ch[i]:3);
 
readln
end.

В примере выделяется область памяти под массив из 11 символов. Их индексы от 1 до 11. В процессе выполнения программы пользователь вводит 11 любых символов (например, ‘q’, ’w’, ’e’, ’2’, ’t’, ’9’, ’u’, ’I’, ’I’, ’o’, ’p’), которые записываются в ячейки массива. Текущее значение переменной i в цикле for используется в качестве индекса массива. Второй цикл for отвечает за вывод элементов массива на экран.

Функция sizeof, примененная к имени массива или имени массивного типа, возвращает количество байтов, отводимое под массив.

Задачи к данной теме

Комментарии

Задание, массивы

составить программу нахождения произведения четных элементов одномерного массива

помогите пожалуйста написать программу, массивы в паскале

Каждому отрицательному элементу массива А[2х3] присвоить значение 5. Каждый элемент массива вычисляется по формуле: А[i, j]=sin (15* (i+j)).

Program massiv2;Const n=2;

Program massiv2;
Const n=2; m=3;
Type Matrix=Array[1..n,1..m] of real;
Var A:Matrix;
 
Procedure Make(Var A: matrix);
  var i,j: integer;
  begin
  for i:=1 to n do
   for j:=1 to m do
    A[i,j]:=sin(15*(i+j));
 end;
 
Procedure Print(A:matrix);
 var i,j: integer;
  begin
  for i:=1 to n do 
  begin
   for j:=1 to m do
     write(A[i,j]:5:2);
   writeln;
   end;
 
Procedure Preobr(Var A: matrix);
  var i,j: integer;
  begin
  for i:=1 to n do
   for j:=1 to m do
    if  A[i,j]then  A[i,j]:=5;
 end;
 
 
 
Begin 
   Make(A);
   writeln('Исходный массив:');
   Print(A);
   Preobr(A); 
   writeln('Преобразованный массив:');
   Print(A);
 End.

const N = 2; M = 3; var

const N = 2; M = 3;
var
    mtx: array[1..N,1..M] of real;
    i,j: byte;
begin
    for i:=1 to N do begin
        for j:=1 to M do begin
            mtx[i,j] := sin(15*(i+j));
            if mtx[i,j] then
                mtx[i,j] := 5;
            write(mtx[i,j]:7:2);
        end;
        writeln;
    end;    
end.

ЗАДАНИЕ 1Составить программу

ЗАДАНИЕ 1
Составить программу с использованием базовых алгоритмов для работы с одномерными массивами.
ВАРИАНТЫ ЗАДАНИЯ
сформулировать вещественный массив А1(45), элементами которого являются случайные числа. Найти самую длинную последовательность чисел, упорядоченную по возрастанию. Вывести на экран исходный массив и найденную последовательность. Для последовательностей одной длины вывести их все.

решение

решение

Вывести заданный массив на

Вывести заданный массив на печать.
Входные данные: Выходные данные:

В первой строке входного потока задано натуральное число N - количество элементов целочисленного массива (N Во второй строке перечислены через пробел значения элементов массива Ai (-32000

Вывести в столбик значения всех элементов заданного массива в прямом порядке.
Пример входного файла (input.txt):

5
2 5 1 100 -930

Пример выходного файла (output.txt):

2
5
1
100
-930

Помогите решить задачу

Задан числовой массив А(m,n). Некоторый элемент этого массива назовем седловой точкой, пусть он является одновременно наименьшим в своей строке и наибольшим в своем столбце. Разработайте алгоритм, составьте программу по этому алгоритму, позволяющую напечатать номера строки и столбца какой-нибудь седловой точки, если она существует, и напечатать число 0, если такой точки нет.

Если матрица заполняется

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

Для вашей задачи матрицу лучше заполнять в ручную. В задаче, указанной выше, знак . Для вывода 0 когда элемент не найден, можно ввести переменную flag2 и присвоить ей false до всех циклов. Изменить в выводе:

    if flag = True then begin
        writeln('row:',i,' col:',min);
        flag2 := True;
    end;

После всех циклов: если flag2 = False вывести 0.

Помогите решить задачу с использованием функций

Вычеслить: 2-я задача http://s012.radikal.ru/i319/1411/cd/439e5873c75b.jpg

помогите решить!

создайте массив В из преобразованных по формуле cos(А[i]) элементов массива А.

Помогите пожалуйста решить задачу

Найдите максимальные элементы в каждом столбце матрицы (n, m) и выведите их в виде одномерного массива

Нужна помощь :)

информационная система об ассортименте книжных магазинов должна обрабатывать данные о магазинах( номер, район города,тип(государственной, частный,акционерный), дата открытия и о книгах (название, автор,год издания, язык, цена одного экземпляра, количество экземпляров, в каком магазине продается).

Та же проблема, что и здесь.

Та же проблема, что и здесь.

Помогите пожалуйста)

Задача . вычислите используя рекурсию :
http://cs624720.vk.me/v624720566/bfc9/jeRicX5zDL0.jpg

Как понимаю, здесь рекурсия

Как понимаю, здесь рекурсия используется лишь для нахождения факториала, и в условии ошибка: если в первом случае > 5, то во втором должно быть

var
    n: byte;
    y: longint;
function factorial(m: byte): longint;
begin
    if m = 1 then
        factorial := 1
    else
        factorial := m * factorial(m-1);
end;
begin
    readln(n);
    if n > 5 then
        y := (n+4) * (n+4)
    else 
        y := factorial(n);
    writeln(y);
end.

Помогите решишь Функцию)

http://cs624720.vk.me/v624720566/bfad/3zFCYIoKLzA.jpg

Нужна помощь...

Ввести одномерный массив А(n). если в массиве нет четных элементов, то заменить все положительные элементы на 0, иначе найти максимальный по модулю элемент массива и его номер.

const N = 10; var arr:

const N = 10;
var
    arr: array[1..N] of integer;
    i, id: byte;
    flag: boolean;
    max: integer;
begin
    for i:=1 to N do
        read(arr[i]);
 
    flag := True;
    for i:=1 to N do
        if not odd(arr[i]) then begin
            flag := False;
            break;
        end;
 
    if flag = True then begin
        for i:=1 to N do begin
            if arr[i] > 0 then
                arr[i] := 0;
            write(arr[i],' ');
        end;
        writeln;
    end
    else begin
        max := abs(arr[i]);
        id := 1;
        for i:=2 to N do
            if abs(arr[i]) > max then begin
                max := abs(arr[i]);
                id := i;
            end;
        writeln('arr[',id, ']=', max);
    end;
end.

помогите опять...

Почему при вводе массива, у меня выкидывает из паскаля? И как можно задать элементы массива рандомно?(используя randomize).

Я пользуюсь FreePascal. Вот

Я пользуюсь FreePascal. Вот два примера выполнения программы:
1

6 3 -3 0 8 5 5 -10 12 8
arr[9]=12

2

3 5 7 -3 1 1 1 -7 7 11
0 0 0 -3 0 0 0 -7 0 0

Числа можно вводить и через Enter, а не пробел.

Примеры заполнения массива случайными числами есть во множестве примеров на этом сайте.

Генетические Алгоритмы

Здравствуйте , может у кого-нибудь есть реализация генетического алгоритмы на языке паскаль? очень нужно , заранее спасибо .

помогите решить задачу,пожалуйста___!

Вычислить суммы отрицательных элементов каждого столбца матриц A(n,n),B(m,m).

работа в графическом режиме,помогите пож..

Нарисуйте пирамиду составлящую из заполненых шестиугольников.В основнии пирамиды 20 шестиугольников.

NxN)))

Дана прямоугольная матрица размером n x m,содержащая целые положительные числа.Определить сумму элементов в каждой строке матрицы и упорядочить номера строк по убыванию значений найденных сумм с помощью алгоритма сортировки.Вывести упорядоченный список номеров строк и соответствующих им мумм.

https://pas1.ru/rows-sum

https://pas1.ru/rows-sum

Ff помогите

Дан файл f,компоненты которого являются целыми числами.Никакая из компонент файла не равна нулю.Файл f содержит столько же отрицательны чисел,сколько и положительных.Используя вспомогательный файл h,переписать компоненты файла f в файл g так,чтобы в файле g сначала шли положительные,потом отрицательные числа.

var f,g,h: file of

var
    f,g,h: file of integer;
    n: integer;
begin
    assign(f,'f');
    assign(h,'h'); // вспомог.
    assign(g,'g');
 
    rewrite(f);
    writeln('Вводите числа: ');
    read(n);
    while n  0 do begin
        write(f,n);
        read(n);
    end;
    close(f);
 
    reset(f);
    rewrite(h);
    rewrite(g);
    while not EOF(f) do begin
        read(f,n);
        if n > 0 then write(g,n)
        else write(h,n);
    end;
    close(h);
 
    reset(h);
    while not EOF(h) do begin
        read(h,n);
        write(g,n);
    end;
    close(h);
 
    reset(g);
    while not EOF(g) do begin
        read(g,n);
        write(n,' ');
    end;    
    close(g);    
end.

Программирование с использованием типа запись,Помогите пожалуйст

Для автоматизации обработки информации о студентах необходимы следующие данные :фамилия,имя,отчество,дата рождения,домашний адрес,группа,факультет,форма обучения,сведения о проживании в общежитии,о родителях.

Это не задача.

Это не задача.

Ммм

Если это не задача,как мне ее сделать???

Непонятно, что надо сделать?

Непонятно, что надо сделать? Скорее всего это должно поясняться в контексте лекции/урока.
Если просто создать тип данных, то читайте теорию. Здесь есть пример https://pas1.ru/record-variants-task#comment-10109 . У вас будет просто больше полей в записи.
Тело программы и переменные вообще можно опустить.

Если же надо создать интерфейс для заполнения базы данных студентов, поиска по определенным полям, создание отчетов, изменения данных, то это уже большая программа, хотя очень простая. Я писать не буду. В указанном выше примере есть элементы работы с массивом записей. Можете сделать по-аналогии.

помогите написать код

Заменить первые К элементов на противоположные по знаку

const N = 15; var arr:

const N = 15;
var
    arr: array[1..N] of integer;
    i, k: byte;
begin
    randomize;
    for i:=1 to N do begin
        arr[i] := random(100) - 50;
        write(arr[i]:4);
    end;
    writeln;
    write('Введите k , N, ': ');
    readln(k);
    if k > N then exit;
    for i:=1 to k do arr[i] := -1 * arr[i];
    for i:=1 to N do 
        write(arr[i]:4);
    writeln;
end.

массив хх содержащий символы от 0 до z

помогите составить массив хх содержащий символы от 0 до z. А дальше несколько циклов в цикле, где результатом будет символьная переменная слепленная из элементов. Хх(I)+xx(j)+xx(f)+...
хочу сделать циферно-буквенный счетчик

const N = 100; var arr:

const N = 100;
var
    arr: array[1..N] of char;
    i, k: byte;
begin
    k := 0;
    for i:=1 to 127 do
        if ('a' = chr(i)) and ('z' >= chr(i)) or ('0' = chr(i)) and ('9' >= chr(i)) then begin
            k := k + 1;
            arr[k] := chr(i);
            write(arr[k]);
        end;
    writeln;
 
end.

Далее не понятно, что вы хотите получить. Если перебрать все возможные комбинации элементов массива, то вряд ли это возможно. Даже трехсимвольных комбинаций будет чрезвычайно много:

    for i:=1 to k do
        for j:=1 to k do
            for f:=1 to k do
                write(arr[i],arr[j],arr[f],', ');

ПОМОГИТЕ ПОЖАЛУЙСТА РЕШИТЬ ЗАДАЧУ

Вывести в порядке возрастания цифры,входящие в десятичную запись натурального числа N.

const N = 10; var arr:

const N = 10;
var
    arr: array[1..N] of byte;
    m: longint;
    i, j, k, b: byte;
begin
    readln(m);
    k := 0;
    while m > 0 do begin
        k := k + 1;
        arr[k] := m mod 10;
        m := m div 10;
    end;
 
    for i:=1 to k-1 do
        for j:=1 to k-i do 
            if arr[j] > arr[j+1] then begin
                b := arr[j];
                arr[j] := arr[j+1];
                arr[j+1] := b;
            end;        
 
    for i:=1 to k do 
        write(arr[i],' ');
    writeln;
end.

помоги пожалуйста

Ввести массив F(n) вещественных чисел. Вычислить сумму элементов массива, превосходящих по значению среднее арифметическое среди значений элементов массива. Сумму и среднее арифметическое распечатать.

const N = 10; var arr:

const N = 10;
var
    arr: array[1..N] of real;
    i: byte;
    arg, sum: real;
begin
    randomize;
    arg := 0;
    for i:=1 to N do begin
        arr[i] := random();
        write(arr[i]:5:2);
        arg := arg + arr[i];
    end;
    arg := arg / N;
    writeln;
    writeln('Среднее арифметическое: ', arg:5:2);
    sum := 0;
    for i:=1 to N do begin
        if arr[i] > arg then
            sum := sum + arr[i];
    end;
    writeln('Сумма элементов, превосходящих среднее арифметическое: ', sum:5:2);
end.

Помогите решить задачу

Найдите сумму и количество положительных, отрицательных элементов массива, попавших в интервал [a;b].

const N = 20; var arr:

const N = 20;
var
    arr: array[1..N] of integer;
    i, qty: byte;
    a, b, c, sum: integer;
begin
    randomize;
    for i:=1 to N do begin
        arr[i] := random(100)-50;
        write(arr[i]:4);
    end;
    writeln;
    write('Интервал: ');
    readln(a, b);
    if a > b then begin
        c := a;
        a := b;
        b := c;
    end;
    qty := 0;
    sum := 0;
    for i:=1 to N do 
        if (arr[i] >= a) and (arr[i] = b) then begin
            qty := qty + 1;
            sum := sum + arr[i];
        end;
    writeln('Количество: ', qty);
    writeln('Сумма: ', sum);
end.

Пример выполнения:

 -25 -28  41  35  28  33 -46  35   2 -35 -49  49 -31   5  34 -46 -32 -40 -14   5
Интервал: 5 -10
Количество: 3
Сумма: 12

помогите решить задачу

Подсчитайте количество слов в строке и выведите длину каждого слова.

var str, s: string;

var
    str, s: string;
    arr: array[1..255] of string;
    n,i,l: byte;
begin
    readln(str);
    l := length(str);
    n := 0;
    s := '';
    for i:=1 to l do 
        if ((str[i] = ' ') or (i = l)) and (s  '') then begin
            n := n + 1;
            if (i = l) and (str[i]  ' ') then s := s + str[i];
            arr[n] := s;
            s := '';
        end
        else
            if str[i]  ' ' then
                s := s + str[i];
    writeln(n);
    for i:=1 to n do 
        writeln(arr[i],' - ', length(arr[i]));
end.

Пример выполнения:

  one two     three   
3
one - 3
two - 3
three - 5

Помогите решить задачу пожалуйста

Создайте из четных символов строки st1 строку str2 и из нечетных символов строку str3.

var str1,str2,str3:

var
    str1,str2,str3: string;
    l,i: byte;    
begin
    readln(str1);
    str2 := '';
    str3 := '';
    l := length(str1);
    for i:=1 to l do
        if odd(i) then
            str3 := str3 + str1[i]
        else
            str2 := str2 + str1[i];
    writeln(str2);
    writeln(str3);
end.

Не могу РЕШИТЬ задачу

Дана строка произвольного текста.Построить множество,содержащее символы-цифры,входящие в этот текст.Вывести на печать в алфавитном порядке элементы этого множества и их ASC||-коды.

const N = 255; var str:

const N = 255;
var
    str: string;
    ascii: array[1..N] of byte;
    l,i,j,b: byte;    
begin
    readln(str);
    l := length(str);
    for i:=1 to l do
        ascii[i] := ord(str[i]);
 
    for i:=1 to l-1 do // сортировка
        for j:=1 to l-i do
            if ascii[j] > ascii[j+1] then begin
                b := ascii[j];
                ascii[j] := ascii[j+1];
                ascii[j+1] := b;
            end;
 
    for i:=1 to l do 
        write(ascii[i]:4);
    writeln;
    for i:=1 to l do 
        write(chr(ascii[i]):4);
    writeln;            
end.

помогите решить!!!!

В квадрате NxN стоят буквы. Найти в нем цепочку составляющую заданное слово (одно вхождение) либо сказать что там его нет. Цепочку составляют соседние по вертикали либо горизонтали буквы, каждая не может входить в цепочку более одного раза.

Без учета одного вхождения

Без учета одного вхождения слова в матрицу и уникальности букв в цепочке.
https://pas1.ru/matrix-word