Форум программистов, компьютерный форум, киберфорум
PascalABC.NET
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.64/11: Рейтинг темы: голосов - 11, средняя оценка - 4.64
0 / 0 / 0
Регистрация: 11.10.2019
Сообщений: 28

Является ли массив перестановкой

19.10.2019, 10:07. Показов 2250. Ответов 3
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Не могу понять почему после правильного ответа выводит "0". Само задание:Описать функцию Digit(А, N) целого типа, возвращающую 0, если данный целочисленный массив А размера N является перестановкой, то есть содержит все числа от 1 до N; в противном случае вывести номер первого недопустимого элемента.

Pascal
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
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
type
  TMas = array[1..100] of integer;
 
function Digit(A: TMas; N, i, j: integer): integer;
begin
  
  i := 0;
  repeat
    inc(i);
    j := 1;
    { Проверяем элемент a[i] с предыдущими элементами a[1], a[2], ..., a[i-1] 
    на равенство: если a[i] ≠ a[j] для всех j=1..i-1, то переходим к следующему
    элементу, в противном случае (a[i] = a[j] для некоторого j < i) выходим из
    цикла и выводим результат: }
    
    while (j < i) and (a[i] <> a[j]) do
      inc(j)
    
    { Выходим из цикла в одном из двух случаев: 
    1)мы нашли равные элементы в предыдущем цикле (j < i);
    2)Мы дошли до конца массива (i = N): }
    
  until (j < i) or (i = N);
  writeln;
  if j < i then writeln('Номер первого недопустимого элемента: ', i)
  else writeln(0);
  
end;
 
var
  a: TMas;
  N, i, j: Integer;
 
begin
  
  Write('N: ');  
  for i := 1 to N do
    a[i] := random(1, 15);
  
  for i := 1 to N do
    write(a[i], ' ');
  writeln;
  writeln(Digit(A, N, i, j));
  
end.
  Readln(N);
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
19.10.2019, 10:07
Ответы с готовыми решениями:

Если массив является перестановкой, то есть содержит все числа от 1 до N, то вывести 0
Дан целочисленный массив размера N. Если он является перестановкой, то есть содержит все числа от 1 до N, то вывести 0, в противном случае...

Является ли текст перестановкой начального отрезка алфавита
uses crt; var s:string; i:byte; yes:boolean; begin clrscr; yes:=true; writeln('Vvedite stroky'); readln(s); if...

Проверить является ли заданный текст перестановкой некоторого начального отрезка латинского алфавита
Проверить является ли заданный текст перестановкой некоторого начального отрезка латинского алфавита. Соответственно текст вводим с...

3
 Аватар для JuriiMW
5095 / 2661 / 2355
Регистрация: 10.12.2014
Сообщений: 10,059
19.10.2019, 11:27
Digit — функция, результат которой по умолчанию равен 0 и вами не переопределяется.
Вот он и выводится.
1
Почетный модератор
 Аватар для Puporev
64314 / 47610 / 32743
Регистрация: 18.05.2008
Сообщений: 115,168
19.10.2019, 11:32
Я бы так написал.
Pascal
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
type TMas = array[1..100] of integer;
function Digit(A: TMas; N: integer): integer;
var f:array[1..100] of boolean;
    i,k:integer;
begin
for i:=1 to n do f[i]:=false;//инициируем массив как false
k:=0;//пусть перестановка
i:=1;
repeat
if (a[i]<1)or(a[i]>n)or f[i] then k:=i//если число за интервалом или в ячейке логического массива уже true, 
                                                    // то это номер первого нарушителя
else f[i]:=true;//иначе пишем в массив true
inc(i);
until(i>n)or(k<>0);//выход если прошли массив или нашли нарушителя
Digit:=k
end;
var a:TMas;
    n,i:integer;
begin
repeat
write('Введите размер массива от 2 до 100 n=');
readln(n);
until n in [2..100];
writeln('Введите ',n,' элементов массива, целых чисел');
for i:=1 to n do
readln(a[i]);
write(Digit(a,n))
end.
0
 Аватар для JuriiMW
5095 / 2661 / 2355
Регистрация: 10.12.2014
Сообщений: 10,059
19.10.2019, 11:53
А я бы написал так:
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
function Digit(a : array of Integer) : Integer;
begin
  var b := ArrFill(a.Length, False);
  for var i := 1 to a.Length do
    begin
      var index := a.FindIndex(v->v=i);
      if index >= 0 then b[index] := True;
    end;
  Result := b.FindIndex(v->Not v)+1;
end;
 
begin
  var N := ReadInteger('N =');
  
  var a := 1.to(N).ToArray.Shuffle;
  a.Println;
  Digit(a).Println;
  
  a[Random(N)] := Random(1,N);
  a.Println;
  Digit(a).Println;
end.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
19.10.2019, 11:53
Помогаю со студенческими работами здесь

Вывести наибольшую разность чисел, 1ое из которых может быть получено перестановкой цифр a, а 2ое – перестановкой цифр b
В конторе «Рога и Копыта» подходит время подведения годового баланса. В бухгалтерию поступили сведения о том, что, согласно документам,...

Массив: Получить матрицу Y перестановкой столбцов – первого с последним, второго с предпоследним и т. д.
Привет! Помогите, пожалуйста, решить задачу: Дана действительная матрица X размера 6Х9. Найти матрицу Y, получающуюся из данной...

Является ли массив перестановкой
Дан целочисленный массив размера N. Если он является перестановкой, то есть содержит все числа от 1 до N, то вывести 0; в противном ...

Определить, является ли массив перестановкой от 1 до N
Дан массив размера N. Выяснить, является ли этот массив перестановкой чисел от 1 до N (то есть каждое число от 1 до N встречается в массиве...

Есть массив, проверить, является ли он перестановкой
Проблема! Есть массив, проверить, является ли он перестановкой.Не работае программа при вводе одинаковых чисел(((( Подскажите, как...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
Установка Emscripten SDK (emsdk) и CMake на Windows для сборки C и C++ приложений в WebAssembly (Wasm)
8Observer8 30.01.2026
Чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. Система контроля версиями Git. . .
Подключение Box2D v3 к SDL3 для Android: физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
Загрузка PNG с альфа-каналом на SDL3 для Android: с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
Загрузка PNG с альфа-каналом на SDL3 для Android: с помощью SDL3_image
8Observer8 27.01.2026
Содержание блога SDL3_image - это библиотека для загрузки и работы с изображениями. Эта пошаговая инструкция покажет, как загрузить и вывести на экран смартфона картинку с альфа-каналом, то есть с. . .
Влияние грибов на сукцессию
anaschu 26.01.2026
Бифуркационные изменения массы гриба происходят тогда, когда мы уменьшаем массу компоста в 10 раз, а скорость прироста биомассы уменьшаем в три раза. Скорость прироста биомассы может уменьшаться за. . .
Воспроизведение звукового файла с помощью SDL3_mixer при касании экрана Android
8Observer8 26.01.2026
Содержание блога SDL3_mixer - это библиотека я для воспроизведения аудио. В отличие от инструкции по добавлению текста код по проигрыванию звука уже содержится в шаблоне примера. Нужно только. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru