М
Молодежь
К
Компьютеры-и-электроника
Д
Дом-и-сад
С
Стиль-и-уход-за-собой
П
Праздники-и-традиции
Т
Транспорт
П
Путешествия
С
Семейная-жизнь
Ф
Философия-и-религия
Б
Без категории
М
Мир-работы
Х
Хобби-и-рукоделие
И
Искусство-и-развлечения
В
Взаимоотношения
З
Здоровье
К
Кулинария-и-гостеприимство
Ф
Финансы-и-бизнес
П
Питомцы-и-животные
О
Образование
О
Образование-и-коммуникации
X5Z6
X5Z6
27.02.2022 23:04 •  Информатика

Язык с. на фотографии с комментариями решения.

👇
Ответ:
Лuзуня
Лuзуня
27.02.2022

Немного теории:

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

Имя массива хранит адрес его нулевого элемента. Поэтому адрес любого i элемента массива можно представить как (x+i), где x - указатель на первый элемент массива. А его значение как *(x+i)

Подобные операции верны для любого типа и размера массивом, так как при прибавлении к указателю целого числа, он "сдвигается" не на i байтов, а на i элементов этого типа.

В данном задании:

int a[]= {7,8,9} - инициализация массива. По сути, это описание и присваивание значения одновременно. После выполнения этой строчки: a[0]=7; a[1]=8; a[2]=9 - массив из трех элементов, нумерация с нуля.

int *b=a -  Эта строчка переводится как "создаем переменную b типа указатель на целое и присваем ему адрес нулевого элемента массива".

*(b+2)=b+1 - очень странная запись.

*(b+2) равносильно a[2] - значение последнего элемента данного массива. Переменная b содержит целое число, которое является адресом нулевого элемента массива. b+1 - указатель "сдвигается на 1 элемент вправо", т.е (b+1) - адрес первого элемента массива.

То есть данная запись означает, что в последний элемент массива(a[2] в данном случае) записывается адрес первого элемента массива(a[1] в данном случае).

b[1] - такая запись указателя с индексом равносильна a[1] - значению первого элемента массива.

В итоге: b[1] <=> a[1]=8

Примечание:

Изначально ваша программа не выполниться, так как запись int b*=a - неверная(правильно int *b=a)

4,5(39 оценок)
Открыть все ответы
Ответ:
igor2285
igor2285
27.02.2022

USES CRT;

VAR m1,m2,n,n1,n2,n3,n4,n5,n6,s1,s2:LongInt;

BEGIN

ClrScr;

     ReadLn(n);

  m1:=n;

   n1:=m1 div 100;

   n2:=m1 mod 10;

   n3:=(m1-n1*100-n2) div 10;

 if n1=n2 then if n1=n3 then writeln('vse =');

 if n1=n2 then writeln('1 i 3 =');

 if n2=n3 then writeln('2 i 3 =');

 if n1=n3 then writeln('1 i 2 =')

 else writeln('<>');

 END.

Проверяйте, что непонятно - спрашивайте.

Можно чуть поправить вывод, чтобы когда vse =, не вылезали 1 i 3, 1 i 2, 2 i 3.

Да и вообще writeln'ов можно наставить и переменные назвать покрасивше. но это уж вы сами, думаю, справитесь. В VAR у меня тоже есть лишние переменные, переделывал старый свой код наспех =)

Всего хорошего.

4,7(24 оценок)
Ответ:
nikoscki
nikoscki
27.02.2022
Const
    N = 10;

var
    A: array[1..N] of integer;

function Fun: integer;
var
    i, M: integer;
begin
    writeln('Введите число M=');
    readln(M);
    for i := 1 to N do
        if A[i] = M then Fun := i;
end;

procedure CreateMassive;
var
    i: integer;
begin
    for i := 1 to N do
    begin
        A[i] := Random(199) - 100;
        write(A[i],' ');
    end;
    Writeln;
end;

begin
    CreateMassive;
    Writeln(Fun);
end.

вот вариант исправления который работает, хотя конечно не факт что он работает как там кто-то задумывал)))
не понятно было назначение функции Fun потому она делает поиск номера элемента равного М
а вообще глобальные переменные это зло. Так что проектирование тут в корне не верно
4,4(36 оценок)
Это интересно:
Новые ответы от MOGZ: Информатика
logo
Вход Регистрация
Что ты хочешь узнать?
Спроси Mozg
Открыть лучший ответ