Основи програмування на С ++ для початківців

Задачі та рішення: Указатели C

Тему Указатели в C мы рассмотрели в двух статьях:

–  Частина 1: Указатели С

– Частина 2: Указатели С

Теперь вам придется много практиковаться, чтобы закрепить знания и до конца разобраться. Решим несколько задач для начала.

1.  завдання елементарна, але вимагає хорошого розуміння що таке покажчики. Дан покажчик: double **p = 0; Виконайте наступні завдання (рішення можна оформляти всередині функції main):
* створіть конструкцію, зображену на малюнку;
* виведіть число, вказане в квадратику, на екран;
* після цього видаліть всі динамічні об'єкти.

задача з рішенням, покажчики С ++

Знову ж – шукаємо найкоротший рішення. Автор:  

2. Объявите указатель на массив типа double и предложите пользователю выбрать его размер. Далее напишите четыре функции: первая должна выделить память для массива, друга– заполнить ячейки данными, третья – показать данные на экран, четвертая – освободить занимаемую память.  Програма повинна пропонувати користувачеві продовжувати роботу (создавать новые динамические массивы ) або вийти з програми.

3. Объявите указатель на массив типа int и выделите память память для 12-ти элементов. Необходимо написать функцию, которая поменяет значения четных и нечетных ячеек массива. Например есть массив из 4-х элементов:

задачи и решения указатели c++

задачи и решения указатели c++

4.  Оголосити і заповнити двовимірний динамічний масив випадковими числами від 10 до 50. Показать его на экран. Для заполнения и показа на экран написать отдельные функции. (подсказка: функции должны принимать три параметра – указатель на динамический массив, количество строк, количество столбцов).  Кількість рядків і стовпців вибирає користувач.

40 думки про "Задачі та рішення: Указатели C

  1. а так зійде?

    1. Розбиратися з чужим кодом набагато складніше і противнее, ніж написати свій (тим більше, якщо редактор цього сайту спотворює ваш код).
      Відповідь на запитання “а так зійде?” шукайте завжди компіляцією і виконанням вашого коду, краще на різних наборах вхідних даних.

  2. Може бути в третій завданню замість додавання змінної міняти місцями без додавання змінної?
    прибуття[i] += Arr[i + 1];
    прибуття[i + 1] = Arr[i] – молодий лосось[i + 1];
    прибуття[i] -= Arr[i + 1];
    Що краще: створення змінної або ось такі операції?

  3. Функция “void swapDataInCells(int* ptrArr, int sizeOfArr)” по заміні елементів у третій завданню.
    В цикле “for (int i = 0; i < sizeOfArr; i )" потрібно відняти від sizeOfArr одиницю:
    for (int i = 0; i < sizeOfArr – 1; i ).

      1. дурниця… в циклі for (), вираз i < sizeOfArr показує до якого значення змінюється i (індекс елемента). Отняв единицу вы "уменьшаете" кількість які перебираються індексів елементів масиву, але не сам масив

  4. 3.

  5. 4.

  6. Вітаю! написав елементарну прогу для зсуву елементів в масиві вліво, кількість е-ів – n задається, крок зміщення d теж задається, але така проблема, що останні d елементів незрозуміло що виходить, підкажіть у чому проблема?!
    #include
    #include
    #include

    using namespace std;

    недійсні Зази(INT s, INT * повинен);
    int main(){
    Int N,d;
    srand(time(0));
    cout <> n;
    INT * р = новий INT[n];
    INT * г = новий INT[n];

    for (int i = 0; i < n; i ){
    p[i] = rand() %100 ;
    cout << p[i] << " ";
    }
    г = р;

    cout <> d;
    for (int i = 0; i < n; i ){
    p[i] = p[i + d];
    if (я == п – d)
    for (int k = 0; i < d; i ){
    p[до + п-д] = г[k];
    }
    }
    cout << p[10];
    //ZAZ(n, p);
    cout << endl;
    system("pause");
    return 0;
    }

    недійсні Зази(INT s, INT * повинен)
    {
    for (int i = 0; i < s; i ){
    cout << з[i] << " ";
    }

    }

  7. 3. Оголосіть покажчик на масив типу int і виділіть ПАМ'ЯТЬ ПАМ'ЯТЬ для 12-ти елементів. Необходимо написать функцию, которая поменяет значения четных и нечетных ячеек массива. Например есть массив из 4-х элементов:

  8. Третє завдання на заміну парних і непарних елементів. Зробив через копіювання масиву.

    ІНТ changeelements(INT * обр,INT * arr2, int size) //функція заміни місцями елементів
    {
    for (int i = 0; i < size; i )
    {
    if (i % 2 == 0)
    {
    arr2[i] = arr[i + 1];
    }
    else if(я 2%!= 0)
    {
    arr2[i] = arr[i – 1];
    }
    }

    повернутися * arr2;
    }

    ІНТ fillarray(INT * обр, int size) //функція заповнення масиву
    {
    srand(time(NULL));
    for (int i = 0; i < size; i )
    {
    arr[i] = rand() % 100;
    }
    повернутися * обр;
    }
    недійсна showarray(INT * обр, int size) //функція виведення масиву
    {
    cout << endl;
    for (int i = 0; i < size; i )
    {
    cout << arr[i] << " ";
    }
    }
    int main()
    {
    int size;
    cout << "Enter massive's size" <> size; //вводимо розмір масиву
    cout << "Massive's size = " << size << endl;
    INT * обр = новий INT[size];
    INT * arr2 = новий INT[size]; //створили другий масив,щоб скопіювати елементи
    fillarray(arr,size);
    showarray(arr, size);
    changeelements(arr,arr2, size);
    showarray(arr2, size);
    delete[]arr;
    delete[]arr2;
    }

    1. Це ж завдання тільки для непарної кількості елементів

      using namespace std;
      ІНТ changeelements(INT * обр,INT * arr2, int size)
      {
      for (int i = 0; i < size; i )
      {
      if (i % 2 == 0 && i + 1 == розмір) // умова виконається, якщо елементів непарна кількість
      {
      arr2[i] = arr[i];
      }
      else if (i % 2 == 0)
      {
      arr2[i] = arr[i + 1];
      }
      else if(я 2%!= 0)
      {
      arr2[i] = arr[i – 1];
      }

      }

      повернутися * arr2;
      }

      ІНТ fillarray(INT * обр, int size) //функція заповнення масиву
      {
      srand(time(NULL));
      for (int i = 0; i < size; i )
      {
      arr[i] = rand() % 100;
      }
      повернутися * обр;
      }
      недійсна showarray(INT * обр, int size)//функція виведення масиву
      {
      cout << endl;
      for (int i = 0; i < size; i )
      {
      cout << arr[i] << " ";
      }
      }
      int main()
      {
      int size;
      cout << "Enter massive's size" <> size;
      cout << "Massive's size = " << size << endl;
      INT * обр = новий INT[size];
      INT * arr2 = новий INT[size];
      fillarray(arr,size);
      showarray(arr, size);
      changeelements(arr,arr2, size);
      showarray(arr2, size);
      delete[]arr;
      delete[]arr2;
      }

залишити коментар

Ваша електронна адреса не буде опублікований. Обов'язкові поля позначені * *