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

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

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

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

10.10.2013, 23:52. Просмотров 1040. Ответов 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
IchimaruGin
62 / 62 / 24
Регистрация: 14.07.2013
Сообщений: 302
Завершенные тесты: 1
11.10.2013, 17:43  [ТС] #16
что бы функция работала)

Добавлено через 1 минуту
ок еще подучу
0
Jupiter
Каратель
Эксперт С++
6559 / 3980 / 227
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
11.10.2013, 17:44 #17
Цитата Сообщение от IchimaruGin Посмотреть сообщение
что бы функция работала)
зачем? чтобы получить тот же результат можно было все и в main-е написать
0
IchimaruGin
62 / 62 / 24
Регистрация: 14.07.2013
Сообщений: 302
Завершенные тесты: 1
11.10.2013, 18:14  [ТС] #18
Цитата Сообщение от Jupiter Посмотреть сообщение
ну и как применить эту функцию к другим числам? не к а и b, а к c d например
вообщето a,b и c,d это переменные а функцию можно и так использовать с другими числами...
если я не правильно понял обьясни в чем я не прав.

Добавлено через 2 минуты
не могу просто понять как можна сохранять эти данные в других переменных зарание неизвестных

Добавлено через 2 минуты
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)
{
    cout << "Vvedite 1 chislo: " << endl;
    cin >> a;                                   // Ввод первого числа
    cout << "Vvedite 2 chislo: " << endl;
    cin >> b;                                   // Ввод второго числа
    pa = &a;
    pb = &b;
    cout << " Suma = " << (*pa + *pb) << endl;  // Подсчет и вывод сумы чисел
}
 
int main()
{
    p1(pa, pb);
    cin >> c;                                   // Задержка экрана
    return 0;
}
если что я такой вариант написал
0
Jupiter
Каратель
Эксперт С++
6559 / 3980 / 227
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
11.10.2013, 18:18 #19
Цитата Сообщение от IchimaruGin Посмотреть сообщение
вообщето a,b и c,d это переменные а функцию можно и так использовать с другими числами...
ок да, тут я неточно выразился, но суть от этого не меняется, a,b жестко захардкожены внутри функции в которую ещё и передаются указатели, но используются они не поназначению.
читаем условие ещё раз
Создать функцию, которая принимает два числа по указателю и к первому добавляет второе.
1. у нас есть два числа
2. мы вызываем функцию, и передаем в эту функция эти два числа
3. после вызова функции мы ожидаем что первое число будет содержать сумму обоих чисел.
-про вывод результата внутри функции ничего в задании не сказано.
-про привязку к переменным а b тоже ничего не сказано.
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
#include <iostream>
 
using std::cin;
using std::cout;
using std::endl;
 
void p1(int* pa, int* pb)
{
    *pa += *pb;
}
 
int main()
{
    int a, b;
    cout << "Vvedite 1 chislo: " << endl;
    cin >> a;                                   
    cout << "Vvedite 2 chislo: " << endl;
    cin >> b;                                  
    
    p1(&a, &b);
    cout << a;
 
    cin >> a;                                   
    return 0;
}
1
IchimaruGin
62 / 62 / 24
Регистрация: 14.07.2013
Сообщений: 302
Завершенные тесты: 1
11.10.2013, 18:23  [ТС] #20
значит я не так понял задание...
0
Nikcharn
71 / 53 / 3
Регистрация: 31.07.2009
Сообщений: 149
11.10.2013, 18:28 #21
Если знаешь классы, можешь реализовать очередь или списки. Будет очень полезная практика.
0
Raali
623 / 327 / 34
Регистрация: 06.07.2013
Сообщений: 1,065
Завершенные тесты: 1
11.10.2013, 18:29 #22
парсер языка brainfuck
0
IchimaruGin
62 / 62 / 24
Регистрация: 14.07.2013
Сообщений: 302
Завершенные тесты: 1
11.10.2013, 18:31  [ТС] #23
и не знал про эту особенность
Цитата Сообщение от Jupiter Посмотреть сообщение
void p1(int* pa, int* pb)
Цитата Сообщение от Jupiter Посмотреть сообщение
p1(&a, &b);
Добавлено через 52 секунды
я не учил пока что классы...
0
zer0mail
2354 / 1984 / 198
Регистрация: 03.07.2012
Сообщений: 7,117
Записей в блоге: 1
11.10.2013, 18:45 #24
Если учил структуры - то этого достаточно.
0
IchimaruGin
62 / 62 / 24
Регистрация: 14.07.2013
Сообщений: 302
Завершенные тесты: 1
11.10.2013, 23:56  [ТС] #25
и структуры не учил

Добавлено через 4 часа 10 минут
Цитата Сообщение от 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
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
// pointer2.cpp
#include <iostream>
#include <iomanip>
#include <cstdlib>
#include <ctime>
 
using std::cin;
using std::cout;
using std::endl;
using std::setw;
 
int i;
int j;
int a;
int b;
int d;
int c[50][50];
 
void masrand(int *pi, int *pj)
{
    srand(time(0));
    for(a = 0; a <= (*pi - 1); a++)
    {
        for(b = 0; b <= (*pj - 1); b++)
        {
            
            c[a][b] = rand() % 100;
        }
    }
}
 
int main()
{
    cout << "Vvedite rozmernost' masiva" << endl;
    cin >> i >> j;
 
    masrand(&i, &j);
        for(a = 0; a <= (i - 1); a++)
    {
        cout << endl;
        for(b = 0; b <= (j - 1); b++)
        {
            cout << setw(3) << c[a][b];
        }
    }
 
    cout << endl;
    cin >> d;
    return 0;
}
Добавлено через 46 секунд
или вывод тоже в функцию засунуть?
0
MrGluck
Модератор
Эксперт CЭксперт С++
7423 / 4538 / 673
Регистрация: 29.11.2010
Сообщений: 12,319
12.10.2013, 00:01 #26
IchimaruGin, суть функции вынести потенциально повторяемый код в отдельный блок, дав ему разъясняющее имя.
Вам необходимо отказаться от глобальных переменных так как это зло.
Вот пример функции, возвращающей сумму двух чисел:
C++
1
2
3
4
int sum(int a, int b)
{
    return a + b;
}
При этом sum будет работать с любыми переменными типа int, переданными ей в качестве параметров.
Впрочем, как следовало бы сделать вам уже написал Jupiter.
Заметьте, что он использует исключительно локальные переменные, вам надо сделать также.

Добавлено через 37 секунд
Цитата Сообщение от IchimaruGin Посмотреть сообщение
int i;
int j;
int a;
int b;
int d;
int c[50][50];
все это должно быть внутри main либо любой другой функции
0
IchimaruGin
62 / 62 / 24
Регистрация: 14.07.2013
Сообщений: 302
Завершенные тесты: 1
12.10.2013, 00:26  [ТС] #27
получилось так
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
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
// pointer2.cpp
#include <iostream>
#include <iomanip>
#include <cstdlib>
#include <ctime>
 
using std::cin;
using std::cout;
using std::endl;
using std::setw;
 
void masrand(int *pi, int *pj)
{
    int a;
    int b;
    int c[50][50];
    srand(time(0));
    for(a = 0; a <= (*pi - 1); a++)
    {
        for(b = 0; b <= (*pj - 1); b++)
        {
            
            c[a][b] = rand() % 100;
        }
    }
}
 
int main()
{
    int a;
    int b;
    int i;
    int j;
    int d;
    int c[50][50];
 
    cout << "Vvedite rozmernost' masiva" << endl;
    cin >> i >> j;
 
    masrand(&i, &j);
        for(a = 0; a <= (i - 1); a++)
    {
        cout << endl;
        for(b = 0; b <= (j - 1); b++)
        {
            cout << setw(3) << c[a][b];
        }
    }
 
    cout << endl;
    cin >> d;
    return 0;
}
Добавлено через 7 минут
1 рандомное число для всех елементов масива
0
MrGluck
Модератор
Эксперт CЭксперт С++
7423 / 4538 / 673
Регистрация: 29.11.2010
Сообщений: 12,319
12.10.2013, 00:32 #28
IchimaruGin, массив с, который используется внутри функции masrand и массив с, который используется в с, это совершенно разные объекты.
Для чего, по вашему, стоит передавать массив в функцию? Чтобы его же рандомно и заполнило.
Вам для реализации не должно понадобиться никаких доп. переменных в функции masrand, кроме параметра цикла. Все операции должны происходить над аргументами, позволяя таким образом менять локальные переменные с помощью функций.

Добавлено через 1 минуту
И еще кое-что. Либо вы вводите размерность массива и используете динамические массивы, либо задаете эту величину константой, остальное (без придирок) неверно.
0
IchimaruGin
62 / 62 / 24
Регистрация: 14.07.2013
Сообщений: 302
Завершенные тесты: 1
13.10.2013, 13:47  [ТС] #29
завтра перепишу код

Добавлено через 22 часа 22 минуты
как насчет такой функции
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
void masrand(int *pi, int *pj)
{
    int a[50][50];
    srand(time(0));
    while(*pi < 0)
    {
        *pi = *pi - 1;
        while(*pj < 0)
        {
            *pj = *pj - 1;
            a[*pi][*pj] = rand() % 100;
        }
    }
}
Добавлено через 28 минут
не, не то... что то в ней не так всетаки( еще подумаю..

Добавлено через 21 минуту
я так понял что указатели лучше всего практиковать с функциями. Проблема моя в том что я учу С++ по Ивору Хортону , в его книге указатели раньше описаны чем функции, следовательно функции я еще не учил... Вобще я сначала по школьной и университетской програмах учил паскаль и делфи то там я писал функции и процедуры а в С++ еще не привык так что я наверно сначала выучу функции а потом вернусь к этой теме. Всем спасиба кто откликнулся.

Добавлено через 20 минут
не в том смысле что проблема в книге... я просто рано полез в указатели)

Добавлено через 13 часов 39 минут
MrGluck,
C++
1
2
    int *pa(nullptr);
    pa = new int [50][50];
в чем тут ошибка?
1 IntelliSense: a value of type "int (*)[50]" cannot be assigned to an entity of type "int *" d:\Programs\Learning\Pointer2\Pointer2\Pointer2.cpp 15
0
MrGluck
Модератор
Эксперт CЭксперт С++
7423 / 4538 / 673
Регистрация: 29.11.2010
Сообщений: 12,319
13.10.2013, 13:56 #30
IchimaruGin, pa у вас задается как одномерный массив, а далее инициализируется как двумерный.
Второй день не могу заменить объявление массива
1
13.10.2013, 13:56
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
13.10.2013, 13:56
Привет! Вот еще темы с ответами:

Написать программу сортировки через указатели на указатели - 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++
Чем они, собственно говоря, отличаются? Поясните, пожалуйста. Не знаю, как так получилось, что в разных источниках - разные...


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

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

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