Форум программистов, компьютерный форум CyberForum.ru
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
 
IchimaruGin
62 / 62 / 24
Регистрация: 14.07.2013
Сообщений: 302
Завершенные тесты: 1
#1

указатели - C++

10.10.2013, 23:52. Просмотров 1038. Ответов 29
Метки нет (Все метки)

Доброго времени суток.
Я начал изучать указатели и ссылки. Кто какие задания может посоветовать для практики?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
10.10.2013, 23:52
Здравствуйте! Я подобрал для вас темы с ответами на вопрос указатели (C++):

Указатели и указатели на указатели, а также типы данных - C++
Недавно начал изучать Си, перешел с Delphi. Много непонятного и пока процесс идет медленно. Накачал литературы, буду изучать) Щас...

Через указатели на указатели посчитать сумму двух чисел и записать в третье - C++
1. Через указатели на указатели посчитать сумму двух чисел и записать в третье. 2. Написать примитивный калькулятор, пользуясь только...

Есть три переменные. Используя указатели на указатели, поменять значение максимальной и минимальной переменной - C++
Мой код. #include <iostream> #include <stdlib.h> #include<iomanip> using namespace std; void min_max(int*pa, int*pb,...

Указатели на указатели с числами. Почему можно присвоить число в 4-ый элемент, если массив из 2 элементов? - C++
Есть массив int **mas; mas=new int*; // выделил место под пять строк, верно ? mas=new int;// выделил для первой строки матрицы два...

Отсортировать массив и вывести на экран (массивы и указатели на указатели) - C++
Даны массивы F-фамилий студентов и S-результаты сессии (5 оценок) , причем s- результат сессии F студента. Отсортировать массив S по...

Указатели на слонов или А зачем нужны указатели? - C++
Знаю что таких вопросов было уйма, но я так и не нашел ответа на свой вопрос. Для чего нужны указатели? Что такое указатели я знаю, это...

29
AnyOne697
134 / 106 / 5
Регистрация: 22.05.2010
Сообщений: 533
11.10.2013, 01:36 #2
Реализуйте умные указатели.
Что должно быть. Должен быть шаблонный класс:
C++
1
2
3
4
5
6
7
8
9
10
11
template <class T> class Pointer {
public:
    Pointer < T > ( T& object );
    Pointer < T > ( Pointer < T > & pointer );
    ~Pointer < T > ();
    T& operator -> ();
    Pointer < T > operator = ( Pointer < T > p );
private:
    unsigned m_count;
    T* m_object;
}
То есть, требуется уметь создавать новый умный указатель, уметь его присваивать другому указателю. Также, требуется вести подсчёт количества ссылок и вызвать, когда требуется, деструкторы.
0
Kuzia domovenok
1892 / 1747 / 119
Регистрация: 25.03.2012
Сообщений: 5,935
Записей в блоге: 1
11.10.2013, 01:51 #3
AnyOne697, ты издеваешься? Какие шаблоны, если указатели не изучены?
0
Jupiter
Каратель
Эксперт С++
6558 / 3979 / 227
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
11.10.2013, 01:53 #4
Цитата Сообщение от AnyOne697 Посмотреть сообщение
Pointer < T > operator = ( Pointer < T > p );
эта перегрузка не перекрывает оператор присваивания сгенерированный компилятором
0
AnyOne697
134 / 106 / 5
Регистрация: 22.05.2010
Сообщений: 533
11.10.2013, 01:57 #5
Цитата Сообщение от Jupiter Посмотреть сообщение
эта перегрузка не перекрывает оператор присваивания сгенерированный компилятором
А такая?
C++
1
Pointer < T > operator = ( Pointer < T > &p );
Добавлено через 1 минуту
Цитата Сообщение от Kuzia domovenok Посмотреть сообщение
AnyOne697, ты издеваешься? Какие шаблоны, если указатели не изучены?
Заодно шаблоны поучим. Хотя их и стоит избегать =)
В общем, в шаблонах нет ничего страшного. Пока дело не дойдёт до огромного проекта с количеством классов больше чем 100 и сложной иерархией между ними. Здесь можно написать и десяток велосипедов вместо использования неудобных классов std::.
0
Kuzia domovenok
1892 / 1747 / 119
Регистрация: 25.03.2012
Сообщений: 5,935
Записей в блоге: 1
11.10.2013, 02:04 #6
Цитата Сообщение от AnyOne697 Посмотреть сообщение
Заодно шаблоны поучим. Хотя их и стоит избегать =)
В общем, в шаблонах нет ничего страшного. Пока дело не дойдёт до огромного проекта с количеством классов больше чем 100 и сложной иерархией между ними. Здесь можно написать и десяток велосипедов вместо использования неудобных классов std::.
рассуждать о плюсах и минусов шаблонов хорошо в соседней теме. templates, STL
Мне почему-то кажется, что ты данную тему с той перепутал. Там очень жаркие споры шли и ты каким-то образом "по инерции" перенёс сюда спор про шаблоны тоже.
А тут IchimaruGin только начал изучать Си. И бесполезно валить всё в одну кучу: шаблоны, классы, указатели. Изучать эти вещи надо как раз в обратной последовательности.
0
MrGluck
Модератор
Эксперт CЭксперт С++
7416 / 4531 / 670
Регистрация: 29.11.2010
Сообщений: 12,273
11.10.2013, 02:11 #7
IchimaruGin,
Создать функцию, которая принимает два числа по указателю и к первому добавляет второе. Затем переделать на ссылки.
Создать функции, которые принимают массив и его размер и:
- рандомно заполняют его
- выводят на экран
- перемешивают элементы (для того, чтобы менять два числа местами создать отдельную функцию)
Все проделывать сначала на указателях, потом на ссылках.

Посложнее:
реализовать однонаправленный список (тут надо было бы уже знать, что такое структуры)
1
Kuzia domovenok
1892 / 1747 / 119
Регистрация: 25.03.2012
Сообщений: 5,935
Записей в блоге: 1
11.10.2013, 02:20 #8
Цитата Сообщение от AnyOne697 Посмотреть сообщение
Пока дело не дойдёт до огромного проекта с количеством классов больше чем 100 и сложной иерархией между ними. Здесь можно написать и десяток велосипедов вместо использования неудобных классов std::.
ты о чём-то своём начал говорить. Какие-то шаблоны... тема про указатели!
Цитата Сообщение от IchimaruGin Посмотреть сообщение
Кто какие задания может посоветовать для практики?
Вот ИМХО довольносамые и спискам, как предложил Глюк.
- Задать в программе несколько локальных переменных, глобальных, функций, у функций аргументы. Вывести на экран адреса всех этих переменных и функций.
-передача указателей как аргументов в функцию. Отличия от передачи аргументов по значению. Написать функцию обмена значений двух переменных void swap(int* a, int* b)
- Задать переменную и несколько указателей. Сделать, чтобы оба указателя указывали на эту переменную. Изменять значение переменной, обращаясь к ней то напрямую, то через указатель. Убедиться, что переменная изменяется при косвенном обращении к ней.

- Изменять указатель, перенаправляя его на разные переменные. Задать разные значения нескольким переменным, обращаясь к ним через один указатель.
Массивы и указатели.
- пройтись по массиву с помощью указателя и вывести содержимое на экран
-Создать программу "оглавление книги". В массив char book[] заносится текст. Создать оглавление книги в виде массива char* chapters[N]
1
IchimaruGin
62 / 62 / 24
Регистрация: 14.07.2013
Сообщений: 302
Завершенные тесты: 1
11.10.2013, 16:31  [ТС] #9
Цитата Сообщение от MrGluck Посмотреть сообщение
Создать функцию, которая принимает два числа по указателю и к первому добавляет второе.
Просто что бы уточнить:
нужна функция
C++
1
int p1(int* pa,int s)
pa -указатель, который принимает два числа s - сума
или
C++
1
int p1(int* pa,int* pb,int s)
pa -указатель, который принимает первое число pb -указатель, который принимает второе число s - сума
0
AnyOne697
134 / 106 / 5
Регистрация: 22.05.2010
Сообщений: 533
11.10.2013, 16:35 #10
Цитата Сообщение от Kuzia domovenok Посмотреть сообщение
А тут IchimaruGin только начал изучать Си. И бесполезно валить всё в одну кучу: шаблоны, классы, указатели. Изучать эти вещи надо как раз в обратной последовательности.
Комплексное изучение - наиболее эффективное изучение. Сложно, но если есть желание, то эффективность много выше. Это так, моя личная заметка.

Цитата Сообщение от Kuzia domovenok Посмотреть сообщение
Мне почему-то кажется, что ты данную тему с той перепутал. Там очень жаркие споры шли и ты каким-то образом "по инерции" перенёс сюда спор про шаблоны тоже.
Премного извеняюсь. Действительно перескачило.
0
MrGluck
Модератор
Эксперт CЭксперт С++
7416 / 4531 / 670
Регистрация: 29.11.2010
Сообщений: 12,273
11.10.2013, 16:51 #11
Цитата Сообщение от IchimaruGin Посмотреть сообщение
Просто что бы уточнить:
Цитата Сообщение от MrGluck Посмотреть сообщение
Создать функцию, которая принимает два числа по указателю и к первому добавляет второе.
Нужна такая функция:
C++
1
2
3
4
void foo(int *x, int *y)
{
    ...
}
0
IchimaruGin
62 / 62 / 24
Регистрация: 14.07.2013
Сообщений: 302
Завершенные тесты: 1
11.10.2013, 17:30  [ТС] #12
Цитата Сообщение от MrGluck Посмотреть сообщение
Создать функцию, которая принимает два числа по указателю и к первому добавляет второе.
C++
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
// Pointer1.cpp
#include <iostream>
 
using std::cin;
using std::cout;
using std::endl;
 
int a;
int b;
int s;
int* pa;
 
int p1(int* pa)
{
    cout << "Vvedite 1 chislo: " << endl;
    cin >> a;
    pa = &a;
    cout << "Vvedite 2 chislo: " << endl;
    cin >> b;
    
    s = a + b;
    return s;
}
 
int main()
{
    int c;
    c = p1(pa);
    cout << "Suma =" << c << endl;
    return 0;
}
Добавлено через 41 секунду
шяс перепишу

Добавлено через 32 минуты
Цитата Сообщение от MrGluck Посмотреть сообщение
Создать функцию, которая принимает два числа по указателю и к первому добавляет второе.
Вот что получилось
C++
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
// Pointer1.cpp
#include <iostream>
 
using std::cin;
using std::cout;
using std::endl;
 
int a;                                          // Первое число
int b;                                          // Второе число
int c;                                          // Доп. число
int* pa(nullptr);                               // Пустой указатель
int* pb(nullptr);                               // Пустой указатель
 
void p1(int* pa,int* pb)
{
    pa = &a;                                    // Присвоение указателю pa адрес а
    pb = &b;                                    // Присвоение указателю pb адрес b
    cout << " Suma = " << (*pa + *pb) << endl;  // Подсчет и вывод сумы чисел
}
 
int main()
{
    cout << "Vvedite 1 chislo: " << endl;
    cin >> a;                                   // Ввод первого числа
    cout << "Vvedite 2 chislo: " << endl;
    cin >> b;                                   // Ввод второго числа
    p1(pa, pb);
    cin >> c;                                   // Задержка экрана
    return 0;
}
0
Jupiter
Каратель
Эксперт С++
6558 / 3979 / 227
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
11.10.2013, 17:36 #13
Цитата Сообщение от IchimaruGin Посмотреть сообщение
Вот что получилось
ну и как применить эту функцию к другим числам? не к а и b, а к c d например
0
IchimaruGin
62 / 62 / 24
Регистрация: 14.07.2013
Сообщений: 302
Завершенные тесты: 1
11.10.2013, 17:39  [ТС] #14
Цитата Сообщение от Jupiter Посмотреть сообщение
ну и как применить эту функцию к другим числам? не к а и b, а к c d например
а зачем?

Добавлено через 1 минуту
задача стояла что бы два числа функция читала!(вроде как)
0
Jupiter
Каратель
Эксперт С++
6558 / 3979 / 227
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
11.10.2013, 17:40 #15
Цитата Сообщение от IchimaruGin Посмотреть сообщение
а зачем?
а для чего параметры у функции p1 ?

Цитата Сообщение от IchimaruGin Посмотреть сообщение
задача стояла что бы два числа функция читала!(вроде как)
иди ещё раз почитай для чего нужны функции, как бы грубо это не звучало но в духе "а зачем?"
0
11.10.2013, 17:40
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
11.10.2013, 17:40
Привет! Вот еще темы с ответами:

Написать программу сортировки через указатели на указатели - C++
Вот моя программа #include &lt;iostream&gt; #include &lt;conio.h&gt; #include &lt;string&gt; using namespace std; //Сортировка &quot;пузырьком&quot;. ...

Используются ли на практике указатели на указатели объектов? - C++
Имеются ввиду указатели именно на объекты, а не динамические массивы. Например такой: Object** obj; А как насчёт такого: Object***...

Указатели на массивы. Указатели и функции - C++
Вот задача: Даны два массива : А и B. Необходимо создать третий массив, в котором нужно собрать: -Элементы обоих массивов; -Общие...

Константные указатели и указатели на константу - C++
Чем они, собственно говоря, отличаются? Поясните, пожалуйста. Не знаю, как так получилось, что в разных источниках - разные...


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

Или воспользуйтесь поиском по форуму:
15
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru