The basics of programming in c++ for beginners

Tasks and Solutions: Pointers C ++

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

–  Part 1: C++ Pointers

– Part 2: C++ Pointers

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

1.  The task of the elementary, but it requires a good understanding of what pointers. Dan pointer: double **p = 0; Perform the following tasks (solutions can execute within the function main):
* create a design, shown in Figure;
* print number, specified in the box, the screen;
* then delete all dynamic objects.

with the solution of the problem, C ++ pointers

Yet again – We are looking for the shortest solution. Author:  

2. Объявите указатель на массив типа double и предложите пользователю выбрать его размер. Далее напишите четыре functions: первая должна выделить память для массива, second– заполнить ячейки данными, третья – показать данные на экран, четвертая – освободить занимаемую память.  The program should prompt the user to continue working (создавать новые динамические массивы ) or withdraw from the program.

3. Объявите указатель на массив типа int и выделите память память для 12-ти элементов. It is necessary to write a function, которая поменяет значения четных и нечетных ячеек массива. Например есть массив из 4-х элементов:

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

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

4.  Declare and populate a two-dimensional array of dynamic random numbers from 10 to 50. Показать его на экран. Для заполнения и показа на экран написать отдельные функции. (подсказка: функции должны принимать три параметра – указатель на динамический массив, количество строк, количество столбцов).  The number of rows and columns the user selects.

40 thoughts on “Tasks and Solutions: Pointers C ++

  1. В целом годно. Не вчитывался, посмотрел по диагонали. Картинки красивые.

    Функции типа giveMemoryToArr я бы не писал (although, на вкус и цвет…).
    Если уж их оставлять, то ИМХО double* freeMemory(double* ptrArr) должна возвращать void. Зачем она возвращает у вас всегда ноль?

    Пример бы какой-нибудь еще (более объемный)… Шашки (человек против человека) whether…

    В целом, well done. Пиши еще :)

  2. Админу огромное спасибо, за то, что дает не только задачи, а и решения с подробными комментариями к коду. Я читала уроки по C++ на нескольких сайтах. На вашеммне нравится больше всего. Удобное содержание главной страницы, задачи с решениями на отдельной странице. При чем задачи сгруппированы по темам, а не все скопом и вперемешку.
    Не останавливайтесь! Write more! :)

  3. Так-то наверное можно задачу 3 и без буферов решить:
    void mixmass(int sz, int *arr)
    {
    for (int i = 1; i < sz; i )
    {
    if (arr[i] % 2 == 0)
    arr[i] = i-1;
    }
    }
    ————————————————————–
    for (int i = 0; i < sz; i )
    {
    mass [i] = i+1;
    std::cout << mass [i] << std::ends;
    };

    mixmass(sz, mass);

    Но уменя не доходит..

  4. В первой задачи куча непонятных конструкций, в предыдущих уроках не было объяснений по них, так зачем же решать задачу способом, который не понятен ученикам?

    1. В 1-й задаче вообще нет никакихконструкций” – нужно только хорошо понимать то, what:
      a). указатель содержит адрес Togo, на что он указывает,
      b). а операция разименования указателя (префиксная операция *) means: “взять value Togo, на что указывает указатель”.

      1. Это я знаю, это было в уроке.Но 4 string, где в скобках стоит void, вообще не могу понять, в уроках никогда в скобках ничего не было;
        String 6, где вообще ничего не понятно, таких конструкций в уроках не было. Задачи должны быть такими, что прочитав все предыдущие статьи их можно было легко понять. Но первая задача совсем не такая.

  5. 3 a task

    #include
    using namespace std;

    int main()
    {
    setlocale(LC_ALL, “rus”);
    system(“color E0”);

    int* array = new int[12];
    for (int i = 0; i < 12; i )
    {
    array[i] = i + 1;
    cout << array[i] << " ";
    }

    cout << endl;

    int b = 0;
    int j = 1;
    int save = 0;
    for (int i = 0; i < 6; i )
    {
    save = array[b];
    array[b] = array[j];
    array[j] = save;

    b = b + 2;
    j = j + 2;
    }

    for (int i = 0; i < 12; i )
    {
    cout << array[i] << " ";
    }

  6. Guys, если не сложно помогите с задачкой: Даны матрицы А и В размера k×m и m×l соответственно. Найти произведение АВ. Перемножение матриц реализовать в виде функции.

    1. Сама задача умножения матриц – “если не сложно” (и даже элементарно – 2 nested loop).
      But:
      1. Есть разные варианты представления 2-мерных матриц (как 2-х мерных массивов, как массивов указателей, как STL контейнероввектор векторов и т.д. … to 10 разных способов или более). В зависимости от выбранного способа вычисления будут записываться совсем по-разному.
      2. Гораздо больше по объёму, чем само умножение, займёт у вас а). ввод исходных матриц + b). вывод результата + in). тестовая задача main() которая будет наглядно демонстрировать процесс и результат.

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

  7. People, а если я хочу написать функция выделения памяти под двухмерный массив, как это выглядит.

    int *givemmry (int **boob, int size1,int size2)
    {
    **boob = new int* [size1];
    for (int i = 0; i < size1; i )
    {
    boob[i] = new int[size2];
    }
    return **boob;
    }

    так он выдает ошибку


    1. int** givemmry( int size1, int size2 ) {
      int **boob = new int* [ size1 ];
      for( int i = 0; i < size1; i++ )
      boob[ i ] = new int[ size2 ];
      return boob;
      }

      Или проще:

      int** givemmry( int size1, int size2 ) {
      return (int**)new int* [ size1 * size2 ];
      }

      1. Во 2-м решении копированием вкралась ошибка, должо быть, naturally:

        int** givemmry( int size1, int size2 ) {
        return (int**)new int [ size1 * size2 ];
        }

  8. Thank you! как я понял, не обязательно указывать тип и индекс массива (boob) в аргументе функции, мы просто возвращаем значение?

    1. Здесь параметр оказывается просто лишнийвы его значение всё-равно затрёте после new, а тип его (и элементов массива) изменить всё-равно не можете.

Leave a Reply

Your email address will not be published. Required fields are marked *