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

С++ Шаблони функцій.

Завдання 1

Написати шаблони функцій для роботи з одновимірним масивом:

a. введення елементів масиву,

b. виводу елементів масиву на екран,

c. пошуку першого входження елемента у масив(індексу входження, повертати -1, якщо не знайдено)

d. пошуку останнього входження елемента у масив,

e. перемішування елементів масиву випадковим чином(декілька разів поміняти місцями елементи з випадковими індексами)

f. заповнення масиву однаковим заданим значенням

g. впорядкування за зростанням

h. впорядкування за спаданням

Для пошуку першого входження елемента у масиві символів(char[]) написати звичайну функцію (яка перекриє шаблон) таким чином,

щоб ігнорувалася різниця між великими та малими латинськими літерами рядків

Протестувати роботу шаблонних функцій для масивів

цілого,

дробового,

символьного типу(char) та

рядкового(string) типу.

Завдання 2

Написати шаблони функцій для роботи з двовимірним масивом(або тривимірним):

a. введення двовимірного(або тривимірного) масиву

b. виведення масиву на екран

c. знаходження найбільшого елемента масиву

template

T maxInMatrix(T m[][COLS], int rows, int cols)

{

T m = arr[0][0];

…….

return m;

}

або

template

auto maxInMatrix(T m, int rows, int cols)

{

auto m = arr[0][0];

…….

return m;

}

d. перевірка чи заданий рядок матриці впорядкований за зростанням (шаблон функції повертає логічне значення), функція отримує додатково індекс рядка

якщо індекс не коректний повертати хибу

e. перевірка чи всі (кожен) рядки матриці впорядковані за зростанням (шаблон функції повертає логічне значення).

Перевірити роботу шаблонів функцій для матриць числового та рядкового(string) типів.

👇
Ответ:
magauiyaa
magauiyaa
18.07.2021

#include <iostream>

#include <algorithm>

#include <random>

// Шаблон функции для ввода элементов массива

template <typename T, size_t N>

void inputArray(T (&arr)[N])

{

   for (size_t i = 0; i < N; ++i)

   {

       std::cout << "Введите элемент " << i << ": ";

       std::cin >> arr[i];

   }

}

// Шаблон функции для вывода элементов массива на экран

template <typename T, size_t N>

void displayArray(const T (&arr)[N])

{

   for (size_t i = 0; i < N; ++i)

   {

       std::cout << arr[i] << " ";

   }

   std::cout << std::endl;

}

// Шаблон функции для поиска первого вхождения элемента в массив

template <typename T, size_t N>

int findFirst(const T (&arr)[N], const T &element)

{

   for (size_t i = 0; i < N; ++i)

   {

       if (arr[i] == element)

       {

           return static_cast<int>(i);

       }

   }

   return -1;

}

// Шаблон функции для поиска последнего вхождения элемента в массив

template <typename T, size_t N>

int findLast(const T (&arr)[N], const T &element)

{

   for (int i = N - 1; i >= 0; --i)

   {

       if (arr[i] == element)

       {

           return i;

       }

   }

   return -1;

}

// Шаблон функции для перемешивания элементов массива случайным образом

template <typename T, size_t N>

void shuffleArray(T (&arr)[N])

{

   std::random_device rd;

   std::mt19937 gen(rd());

   std::shuffle(std::begin(arr), std::end(arr), gen);

}

// Шаблон функции для заполнения массива одинаковым заданным значением

template <typename T, size_t N>

void fillArray(T (&arr)[N], const T &value)

{

   std::fill(std::begin(arr), std::end(arr), value);

}

// Шаблон функции для упорядочивания массива по возрастанию

template <typename T, size_t N>

void sortAscending(T (&arr)[N])

{

   std::sort(std::begin(arr), std::end(arr));

}

// Шаблон функции для упорядочивания массива по убыванию

template <typename T, size_t N>

void sortDescending(T (&arr)[N])

{

   std::sort(std::begin(arr), std::end(arr), std::greater<T>());

}

// Функция для поиска первого вхождения символа в массиве символов (игнорирует регистр)

int findFirst(const char arr[], char element)

{

   for (int i = 0; arr[i] != '\0'; ++i)

   {

       if (tolower(arr[i]) == tolower(element))

       {

           return i;

       }

   }

   return -1;

}

int main()

{

   // Примеры использования шаблонных функций для одномерного массива

   int intArray[5];

   inputArray(intArray);

   std::cout << "Массив intArray: ";

   displayArray(intArray);

   int searchInt = 3;

   int index = findFirst(intArray, searchInt);

   if (index != -1)

   {

       std::cout << "Первое вхождение " << searchInt << " в intArray: " << index << std::endl;

   }

   else

   {

       std::cout << "Элемент " << searchInt << " не найден в intArray." << std::endl;

   }

   double doubleArray[5];

   inputArray(doubleArray);

   std::cout << "Массив doubleArray: ";

   displayArray(doubleArray);

   double searchDouble = 2.5;

   index = findFirst(doubleArray, searchDouble);

   if (index != -1)

   {

       std::cout << "Первое вхождение " << searchDouble << " в doubleArray: " << index << std::endl;

   }

   else

   {

       std::cout << "Элемент " << searchDouble << " не найден в doubleArray." << std::endl;

   }

   char charArray[5];

   inputArray(charArray);

   std::cout << "Массив charArray: ";

   displayArray(charArray);

   char searchChar = 'A';

   index = findFirst(charArray, searchChar);

   if (index != -1)

   {

       std::cout << "Первое вхождение " << searchChar << " в charArray: " << index << std::endl;

   }

   else

   {

       std::cout << "Элемент " << searchChar << " не найден в charArray." << std::endl;

   }

   std::string stringArray[5];

   inputArray(stringArray);

   std::cout << "Массив stringArray: ";

   displayArray(stringArray);

   std::string searchString = "hello";

   index = findFirst(stringArray, searchString);

   if (index != -1)

   {

       std::cout << "Первое вхождение \"" << searchString << "\" в stringArray: " << index << std::endl;

   }

   else

   {

       std::cout << "Элемент \"" << searchString << "\" не найден в stringArray." << std::endl;

   }

   return 0;

}

4,4(88 оценок)
Открыть все ответы
Ответ:
kjhf2225
kjhf2225
18.07.2021
"Типовой школьный" Паскаль:

// PascalABC.Net 3.0, сборка 1064
const
  k = 100;

var
  s, wd: string;
  i, j, m, n, pt, step: integer;
  Words, WordsSort: array[1..k] of string;
  InOrder: boolean;

begin
  Write('Введите строку: '); Readln(s);
  n := Length(s); pt := 1; m := 0;
  repeat
    // Пропускаем все символы до первого непробельного
    while pt <= n do
      if Ord(s[pt]) <= 32 then Inc(pt) else break;
    if pt <= n then begin
      // Выделяем очередное слово
      wd := '';
      while pt <= n do
        if Ord(s[pt]) > 32 then begin wd := wd + s[pt];Inc(pt) end
        else break;
      if wd <> '' then begin Inc(m);Words[m] := wd end
    end
  until pt > n;
  // Теперь Words содержит все m слов.
  // Отсортируем их в массиве WordsSort методом Шелла
  for i := 1 to m do WordsSort[i] := Words[i];
  step := m div 2;
  while step > 0 do begin
    for j := m - step downto 1 do begin
      i := j;
      while i <= m - step do begin
        if WordsSort[i] > WordsSort[i + step] then begin
          wd := WordsSort[i];
          WordsSort[i] := WordsSort[i + 1];
          WordsSort[i + 1] := wd
        end;
        i := i + step
      end
    end;
    step := step div 2
  end;
  // Осталось поэлементно сравнить оба массива
  InOrder := true; i := 1;
  while InOrder and (i <= m) do
  begin InOrder := (Words[i] = WordsSort[i]); Inc(i) end;
  if m = 0 then Writeln('Строка не содержит слов')
  else
    if InOrder then Writeln('Cлова упорядочены')
    else Writeln('Cлова не упорядочены')
end.

Тестовое решение:
Введите строку: слово1    слово2    слово3    слово4 слово5
Cлова упорядочены

Введите строку: слово1    слово2    слово4    слово3 слово5
Cлова не упорядочены

"Современный" вариант решения на Паскале:

// PascalABC.Net 3.0, сборка 1064
var
  s:string;
begin
  Write('Введите строку: '); Readln(s);
  var Delim:=Range(0,32).Select(x->Chr(x)).ToArray;
  var Words:=s.Split(Delim).Where(x->x<>'');
  var WordsSort:=Words.Sorted;
  if Words.SequenceEqual(WordsSort) then Writeln('Cлова упорядочены')
  else Writeln('Cлова не упорядочены')
end.

Тестовое решение совпадает с вышеприведенным.
4,6(59 оценок)
Ответ:
EpicKsushaGames
EpicKsushaGames
18.07.2021
Информационный поток - процесс передачи информации от одного объекта другому.При этом информация может видоизменяться, кодироваться, преобразововаться из одного вида сигналов в другие.Основные устройства компьютера - клавиатура, мышь, монитор, видео плата, процессор, ОЗУ, контроллеры, запоминающие устройства(накопители).Процессор это сердце компьютера, главный наблюдатель в процессе информационных потоков компьютера.При включении процессор инициирует процесс загрузки программ из накопителей в озу, он просит котроллеры чтобы поток данных загружался напрямую, по возможности, из накопителей в ОЗУ, минуя внутреннюю память процессора.Время от времени он опрашивает устройства ввода, мышь клавиатуру, на предмет сигналов, в которых закодированны нажатые кнопки, позиции курсора, итд... Если процессор зависнет, зациклится, то нажатия на кнопки не приведут ни к чему,т.к эти устройства никто не опрашивает.Программы, выполняющиеся на процессоре, могут "попросить" процессор выводить информацию на монитор, подавая комманды.Обрабатывая эти комманды процессор, отправляет данные в видео плату, или в котроллер видеоплаты.Видеоплата, получая данные из процессора в свой видео буфер, преобразует их в аналого-цифровой формат для подачи уже в монитор через кабель.
4,5(36 оценок)
Новые ответы от MOGZ: Информатика
logo
Вход Регистрация
Что ты хочешь узнать?
Спроси Mozg
Открыть лучший ответ