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

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

Войти
Регистрация
Восстановить пароль
 
Simkara
16 / 3 / 3
Регистрация: 26.11.2011
Сообщений: 92
#1

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

26.10.2012, 20:05. Просмотров 419. Ответов 10
Метки нет (Все метки)

Имеется массив C, состоящий из N элементов.
Имеется указатель *p, который хранит в себе эти N элементов.
Имеется указатель *d, в котором хранится минимальное число из предыдущего массива-указателя *p.

Вопрос: как используя это, поменять местами последний элемент массива и минимальный, используя указатели?

C++
1
2
3
4
5
....... 
int z;
z=*(c+(n-1)); // записываем в переменную значение последнего элемента
*(c+(n-1))=*d; //присваиваем последнему элементу минимальное значение
....... //как заменить min элемент массива на последний (z)?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
26.10.2012, 20:05     Указатели
Посмотрите здесь:

C++ Указатели
C++ указатели
Указатели C++
C++ Указатели
Указатели C++
C++ указатели
Указатели C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
castaway
Эксперт С++
4873 / 3012 / 370
Регистрация: 10.11.2010
Сообщений: 11,061
Записей в блоге: 10
Завершенные тесты: 1
26.10.2012, 20:16     Указатели #2
C
1
2
3
int t = *d;
*d = p[N-1];
p[N-1] = t;
Simkara
16 / 3 / 3
Регистрация: 26.11.2011
Сообщений: 92
26.10.2012, 20:37  [ТС]     Указатели #3
Цитата Сообщение от lazybiz Посмотреть сообщение
C
1
2
3
int t = *d;
*d = p[N-1];
p[N-1] = t;
переменной записали найденное min значение
min значению присвоили значение последнего элемента
последнему элементу присвоили min значение
по сути поменялся только последний элемент на min


но min значение в массиве, так и не поменялось на последнее
здесь min значение поменялось только в самом указателе

вот часть рабочего кода:
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
#include <stdlib.h>
#include <time.h>
#include <iostream>
using namespace std;
 
int main()
{
    int n, *p, *d, z;
    cin>>n;
    int c[n];
    srand (time(NULL));
    *d=100;
    for (p=c; p<c+n; p++)  //заполнение и вывод массива
    {
         *p=-100+rand()%200;
         cout<<*p<<" ";
         if (*p<*d)           // поиск min элемента
         {
             *d=*p;
         }
    }
 
    cout<<endl<<"min= "<<*d<<endl; //вывод min элемента
 
    ....   // меняем местами min элемент и последний
 
    for (p=c; p<c+n; p++) //выводим измененный массив
    {
         cout<<*p<<" ";
    }
 
    cin.get();
    cin.get();
    return 0;
}
Croessmah
Модератор
Эксперт CЭксперт С++
12675 / 7183 / 801
Регистрация: 27.09.2012
Сообщений: 17,709
Записей в блоге: 2
Завершенные тесты: 1
26.10.2012, 20:44     Указатели #4
C++
1
*d=100;
как вы делаете присваивание не инициализированному указателю?
Simkara
16 / 3 / 3
Регистрация: 26.11.2011
Сообщений: 92
26.10.2012, 21:01  [ТС]     Указатели #5
эм, правильней сделать так?

C++
1
2
int n, *p, *d, z, min=100;
d=&min;
John Prick
758 / 691 / 124
Регистрация: 27.07.2012
Сообщений: 1,980
Завершенные тесты: 3
26.10.2012, 21:05     Указатели #6
C++
1
2
3
4
5
6
7
8
9
    for (p=c; p<c+n; p++)  //заполнение и вывод массива
    {
         *p=-100+rand()%200;
         cout<<*p<<" ";
         if (*p<*d)           // поиск min элемента
         {
             *d=*p;
         }
    }
Здесь вы сохраняете не указатель на минимальный элемент, а присваиваете значение переменной, на куторую указывает d, значение минимального элемента массива. Если нужен указатель, просто делайте:
C++
1
2
3
4
         if (*p<*d)           // поиск min элемента
         {
             d = p;
         }
Croessmah
Модератор
Эксперт CЭксперт С++
12675 / 7183 / 801
Регистрация: 27.09.2012
Сообщений: 17,709
Записей в блоге: 2
Завершенные тесты: 1
26.10.2012, 21:08     Указатели #7
C++
1
int c[n];
n - должен быть константой или используйте динамическую память
Simkara
16 / 3 / 3
Регистрация: 26.11.2011
Сообщений: 92
26.10.2012, 21:08  [ТС]     Указатели #8
Цитата Сообщение от John Prick Посмотреть сообщение
Здесь вы сохраняете не указатель на минимальный элемент, а присваиваете значение переменной, на куторую указывает d, значение минимального элемента массива. Если нужен указатель, просто делайте:
C++
1
2
3
4
         if (*p<*d)           // поиск min элемента
         {
             d = p;
         }

хитрые указатели, спасибо

Цитата Сообщение от Croessmah Посмотреть сообщение
C++
1
int c[n];
n - должен быть константой или используйте динамическую память
значение n до этого вводится с клавиатуры
Croessmah
Модератор
Эксперт CЭксперт С++
12675 / 7183 / 801
Регистрация: 27.09.2012
Сообщений: 17,709
Записей в блоге: 2
Завершенные тесты: 1
26.10.2012, 21:16     Указатели #9
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
#include <stdlib.h>
#include <time.h>
#include <iostream>
using namespace std;
 
int main()
{
    int n, *p, *d, z, min;
    cin>>n;
    int *c=new int[n];
 
    srand (time(NULL));
     d=&min;
    *d=100;
    for (p=c; p<c+n; p++)  //заполнение и вывод массива
    {
         *p=-100+rand()%200;
         cout<<*p<<" ";
         if (*p<*d)           // поиск min элемента
         {
             d=p;
         }
    }
 
    cout<<endl<<"min= "<<*d<<endl; //вывод min элемента
 
       // меняем местами min элемент и последний 
     z=c[n-1];
     c[n-1]=*d;
     *d=z;
    for (p=c; p<c+n; p++) //выводим измененный массив
    {
         cout<<*p<<" ";
    }
    delete [] c;
    cin.get();
    cin.get();
    return 0;
}
Добавлено через 3 минуты
Цитата Сообщение от Simkara Посмотреть сообщение
значение n до этого вводится с клавиатуры
Память под массивы выделяется на этапе компиляции.
Игорь с++
432 / 455 / 16
Регистрация: 26.01.2011
Сообщений: 2,032
26.10.2012, 21:33     Указатели #10
Цитата Сообщение от Croessmah Посмотреть сообщение
Память под массивы выделяется на этапе компиляции.
если не пользоваться динамическими массивами
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
26.10.2012, 21:38     Указатели
Еще ссылки по теме:

C++ Указатели
C++ Указатели
Указатели C++
C++ Указатели
Указатели C++

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

Или воспользуйтесь поиском по форуму:
Croessmah
Модератор
Эксперт CЭксперт С++
12675 / 7183 / 801
Регистрация: 27.09.2012
Сообщений: 17,709
Записей в блоге: 2
Завершенные тесты: 1
26.10.2012, 21:38     Указатели #11
Цитата Сообщение от Игорь с++ Посмотреть сообщение
если не пользоваться динамическими массивами
читайте выше!
Цитата Сообщение от Croessmah Посмотреть сообщение
n - должен быть константой или используйте динамическую память
код автора темы:
C++
1
2
    cin>>n;
    int c[n];
Yandex
Объявления
26.10.2012, 21:38     Указатели
Ответ Создать тему
Опции темы

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