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

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

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

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

26.10.2012, 20:05. Просмотров 422. Ответов 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++
Объясните что происходит в последней строке , и если мои комменты не правильны поправьте пожалуйста. void order ( int* numb1, int*...

Указатели.... - C++
Найти наибольшее отрицательное число с четными индексами. (Создать указатель на наиболее отрицательное число среди элементов с четными...

Указатели - C++
Используя вместо самой переменной указатель на нее, написать программу в соответствии с заданием (выполнение задания оформить...

Указатели - C++
Всем привет. Нам дали сделать лабу: Дана целочисленная прямоугольная матрица. 1) Определить номер первого из столбцов, содержащих хотя...

Указатели - C++
Есть задание,я сделала через массив,а мне нужно переделать через указатели. #include <iostream.h> #include <stdio.h> #include...

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

Указатели - C++
Доброй ночи! Вот столкнулась с такой проблемой, нужно из одной функции в другую перенести переменную number через указатель, что у меня...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
castaway
Эксперт С++
4880 / 3016 / 370
Регистрация: 10.11.2010
Сообщений: 11,076
Записей в блоге: 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Эксперт С++
12979 / 7291 / 812
Регистрация: 27.09.2012
Сообщений: 18,007
Записей в блоге: 3
Завершенные тесты: 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
773 / 706 / 129
Регистрация: 27.07.2012
Сообщений: 2,022
Завершенные тесты: 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Эксперт С++
12979 / 7291 / 812
Регистрация: 27.09.2012
Сообщений: 18,007
Записей в блоге: 3
Завершенные тесты: 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Эксперт С++
12979 / 7291 / 812
Регистрация: 27.09.2012
Сообщений: 18,007
Записей в блоге: 3
Завершенные тесты: 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 до этого вводится с клавиатуры
Память под массивы выделяется на этапе компиляции.
Игорь с++
433 / 456 / 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++
1) Предположим, что p - указатель, установленный на целую переменную со значением 3. Что можно сказать о значении выражений p, * p, &amp; p, *...

Указатели - C++
Почему такой вариант кода невозможен(конкретно: строка 6)?int indicator, x = 15, y = 10; int *ptr; cin &gt;&gt; indicator; ...

Указатели - C++
Доброго времени суток. У меня задание. Кто поможет? Сказали разобраться с указателями. Программа ругается на +=, выдает ошибку. Как их...

указатели - C++
1) создать функцию(проблем нет) 2) в функции ввести и определить локальную переменную типа int и задать ей значение 1(проблем нет) 3) в...

Указатели - C++
Всем здрасьте ! Тут на днях я прочитал про указатели в одной книге , и мало что о них понял. Не могил бы вы мне рассказать , что это...


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

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

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