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

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

Восстановить пароль Регистрация
 
 
IchimaruGin
60 / 60 / 23
Регистрация: 14.07.2013
Сообщений: 284
Завершенные тесты: 1
10.10.2013, 23:52     указатели #1
Доброго времени суток.
Я начал изучать указатели и ссылки. Кто какие задания может посоветовать для практики?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
10.10.2013, 23:52     указатели
Посмотрите здесь:

Указатели.... C++
C++ Указатели
Указатели C++
C++ Указатели
C++ Указатели
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Nikcharn
 Аватар для Nikcharn
71 / 53 / 3
Регистрация: 31.07.2009
Сообщений: 149
11.10.2013, 18:28     указатели #21
Если знаешь классы, можешь реализовать очередь или списки. Будет очень полезная практика.
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Raali
572 / 276 / 12
Регистрация: 06.07.2013
Сообщений: 917
Завершенные тесты: 1
11.10.2013, 18:29     указатели #22
парсер языка brainfuck
IchimaruGin
60 / 60 / 23
Регистрация: 14.07.2013
Сообщений: 284
Завершенные тесты: 1
11.10.2013, 18:31  [ТС]     указатели #23
и не знал про эту особенность
Цитата Сообщение от Jupiter Посмотреть сообщение
void p1(int* pa, int* pb)
Цитата Сообщение от Jupiter Посмотреть сообщение
p1(&a, &b);
Добавлено через 52 секунды
я не учил пока что классы...
zer0mail
2188 / 1871 / 187
Регистрация: 03.07.2012
Сообщений: 6,661
Записей в блоге: 1
11.10.2013, 18:45     указатели #24
Если учил структуры - то этого достаточно.
IchimaruGin
60 / 60 / 23
Регистрация: 14.07.2013
Сообщений: 284
Завершенные тесты: 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 секунд
или вывод тоже в функцию засунуть?
MrGluck
Ворчун
Эксперт С++
 Аватар для MrGluck
4927 / 2670 / 243
Регистрация: 29.11.2010
Сообщений: 7,429
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 либо любой другой функции
IchimaruGin
60 / 60 / 23
Регистрация: 14.07.2013
Сообщений: 284
Завершенные тесты: 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 рандомное число для всех елементов масива
MrGluck
Ворчун
Эксперт С++
 Аватар для MrGluck
4927 / 2670 / 243
Регистрация: 29.11.2010
Сообщений: 7,429
12.10.2013, 00:32     указатели #28
IchimaruGin, массив с, который используется внутри функции masrand и массив с, который используется в с, это совершенно разные объекты.
Для чего, по вашему, стоит передавать массив в функцию? Чтобы его же рандомно и заполнило.
Вам для реализации не должно понадобиться никаких доп. переменных в функции masrand, кроме параметра цикла. Все операции должны происходить над аргументами, позволяя таким образом менять локальные переменные с помощью функций.

Добавлено через 1 минуту
И еще кое-что. Либо вы вводите размерность массива и используете динамические массивы, либо задаете эту величину константой, остальное (без придирок) неверно.
IchimaruGin
60 / 60 / 23
Регистрация: 14.07.2013
Сообщений: 284
Завершенные тесты: 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
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
13.10.2013, 13:56     указатели
Еще ссылки по теме:

C++ Указатели
C++ Указатели, такие указатели
Указатели.Строки и указатели C++

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

Или воспользуйтесь поиском по форуму:
MrGluck
Ворчун
Эксперт С++
 Аватар для MrGluck
4927 / 2670 / 243
Регистрация: 29.11.2010
Сообщений: 7,429
13.10.2013, 13:56     указатели #30
IchimaruGin, pa у вас задается как одномерный массив, а далее инициализируется как двумерный.
Второй день не могу заменить объявление массива
Yandex
Объявления
13.10.2013, 13:56     указатели
Ответ Создать тему
Опции темы

Текущее время: 04:18. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru