Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.59/75: Рейтинг темы: голосов - 75, средняя оценка - 4.59
0 / 0 / 0
Регистрация: 26.03.2013
Сообщений: 5

Массивы и указатели, поиск минимум-максимум

27.03.2013, 02:16. Показов 15161. Ответов 6
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте! Помогите, пожалуйста, никак не даются указатели, я их уже и так, и сяк кручу, а понимание не приходит... Без указателей - все работает, а здесь по условию нужно именно с ними...

Нужно найти минимальный и максимальный элемент массива, использовать в программе арифметику указателей для продвижения по массиву, а также оператор разыменования. Вот мой код без указателей, нужно переделать его с указателями.

Code
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<iostream>
#include<stdlib.h>
#include<time.h>
 
using namespace std;
void main()
{
    setlocale(0, "");
    srand(time(NULL));
 
    int const size=20;
    int ar[size];
 
    for(int i=0; i<size; i++)
    {
        ar[i]=rand()%100;
        cout<<ar[i]<<"\t";
    }
 
    int max=ar[0], min=ar[0];
    int number_max=0, number_min=0;
 
    for(int i=1; i<size; i++)
    {
        if(max<ar[i])
        {
            max=ar[i];
            number_max=i;
        }
 
        if(min>ar[i])
        {
            min=ar[i];  
            number_min=i;
        }
    }
    cout<<endl<<endl<<"Минимум равен: "<<min<<" и его порядковый номер в массиве "<<number_min+1<<endl;
    cout<<"Максимум равен: "<<max<<" и его порядковый номер в массиве "<<number_max+1<<endl;
}
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
27.03.2013, 02:16
Ответы с готовыми решениями:

Двумерные массивы Найти минимум получить новую матрицу деленные на минимум
Дана матрица размером N x M. Найти в ней наименьший элемент. Получить новую матрицу, элементы которой равны элементам исходной матрицы,...

Поиск строки: минимум 2 слова, длина которых минимум 3 символа
Всем привет! Весь интернет облазил и никак не могу найти регулярное выражение. Нужно чтобы находились строки, в которых есть минимум 2...

Максимум и минимум
Всем привет! Как вывести в одну таблицу сразу значения функци максимума и минимума?.. Например, самый дорогой и самый дешёвый...

6
261 / 236 / 161
Регистрация: 10.12.2011
Сообщений: 513
27.03.2013, 03:44
Ну поидее думаю что так ...
Хотя и другим вариантам тоже буду рад ( это к форумчанам )
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
#include "stdafx.h"
#include <iostream>
#include<time.h>
 
int main()
{
    int Mas[100], Size;
    int *pMas = Mas;
    std::cout<<"Enter array length:";std::cin>>Size;
    srand(time(NULL));
    for ( int i = 0 ; i < Size ; i++ )
    {
        pMas[i] = rand()%100;
        std::cout<<*(pMas+i)<<" ";
    } 
    int max = *pMas, min = *pMas;
    for ( int i = 0; i < Size ; i++ ){
        if ( *(pMas+i) > max ) max = *(pMas+i);
        if ( *(pMas+i) < min ) min = *(pMas+i);
    }
    std::cout<<"\n"<<max<<" "<<min<<"\n";
    system("pause");
    return 0;
}
2
0 / 0 / 0
Регистрация: 27.03.2013
Сообщений: 4
27.03.2013, 05:31
*(ar + i) то же самое, что и ar[i]
ar+i компилятор преобразует в адрес i-го элемента массива
а операция разыменования указателя *(ar + i) обеспечивает доступ к значению,
на которое ссылается указатель.

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
#include<iostream>
#include<stdlib.h>
#include<time.h>
 
using namespace std;
void main()
{
    setlocale(0, "");
    srand(time(NULL));
 
    int const size=20;
    int ar[size];
 
    for(int i=0; i<size; i++)
    {
        *(ar + i)=rand()%100;
        cout<< *(ar + i)<<"\t";
    }
 
    int max= *ar, min= *ar;
    int number_max=0, number_min=0;
 
    for(int i=1; i<size; i++)
    {
        if(max<*(ar+i))
        {
            max=*(ar+i);
            number_max=i;
        }
 
        if(min>*(ar+i))
        {
            min=*(ar+i);  
            number_min=i;
        }
    }
    cout<<endl<<endl<<"Минимум равен: "<<min<<" и его порядковый номер в массиве "<<number_min+1<<endl;
    cout<<"Максимум равен: "<<max<<" и его порядковый номер в массиве "<<number_max+1<<endl;
 
    system("pause");
    }
0
0 / 0 / 0
Регистрация: 26.03.2013
Сообщений: 5
28.03.2013, 02:31  [ТС]
Спасибо огромное Leshak , но вы используете строки, которые мы еще не успели изучить, так что этот вариант пока оставлю "на будущее")
Shaman_UK тоже крутилось в голове *(ar + i), но делала все время ошибку (видно, я действительно плохо понимаю указатели), которая не позволяла решить задачу! Спасибо за ваш вариант!
0
 Аватар для taras atavin
4226 / 1796 / 211
Регистрация: 24.11.2009
Сообщений: 27,562
28.03.2013, 06:09
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
54
55
56
57
58
59
60
61
62
63
#include <iostream>
int *min(int *data, size_t count);
void input(int *data, size_t count);
int main()
{
 size_t n;
 int *a;
 int *m;
 std::cout<<"введите размер массива";
 std::cin>>n;
 std::cout<<std::endl;
 if (n>0)
 {
  a=new int [n];
 }
 else
 {
  a=null_ptr;
 }
 input(a, n);
 m=min(a, 10);
 if (m!=Nnull_ptr)
 {
  std::cout<<"Минимальным является a["<<(m-a)<<"]="(*m)<<std::endl;
 }
 if (a!=null_ptr)
 {
  delete []a;
 }
 return 0;
}
int *min(int *data, size_t count)
{
 int *r;
 int *p;
 if ((data!=null_ptr)&&(count>0))
 {
  for (p=data+count-1, r=p; p>=data; --p)
  {
   if ((*p)<(*r))
   {
    r=p;
   }
  }
  return r;
 }
 return null_ptr;
}
void input(int *data, size_t count)
{
 int *e;
 int *p;
 if ((data!=null_ptr)&&(count>0))
 {
  std::cout<<"Введите массив"<<std::endl;
  for (p=data, e=data+count-1; p<=e; ++p)
  {
   std::cout<<"a["<<(p-data)<<"]=";
   std::cin>>(*p);
   std::cout<<std::endl;
  }
 }
}
Добавлено через 2 минуты
input восстанавливает индекс по указателям и ничего на этом не выигрывает, эта функция будет лучше с перебором индексов, а не указателей, с адресной арифмметикой только внутри опреатора "квадратные скобки", но для демонстрации пойдёт.
0
 Аватар для lemegeton
4903 / 2696 / 921
Регистрация: 29.11.2010
Сообщений: 5,783
28.03.2013, 08:17
Предполагаю, что арфиметику указателей учат уже зная, что такое указатель и как выделять память.
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
#include <ctime>
#include <cstdlib>
#include <iostream>
 
int *getMaximumElement(int *begin, int *end) {
  int *result = begin++;
  while (begin != end) {
    // по старой-доброй традиции С++ используем оператор <
    if (*result < *begin) {
      result = begin;
    }
    // вот и вся адресная арифметика
    ++begin;
  }
  return result;
};
 
int *getMinimumElement(int *begin, int *end) {
  int *result = begin++;
  while (begin != end) {
    // по старой-доброй традиции С++ используем оператор <
    if (*begin < *result) {
      result = begin;
    }
    // вот и вся адресная арифметика
    ++begin;
  }
  return result;
};
 
int main(int argc, char *argv[]) {
  srand(time(0));
 
  int arraySize = 10 + rand() % 5;
  int *array = new int[arraySize];
 
  for (int i = 0; i < arraySize; ++i) {
    std::cout << (array[i] = rand() % 10) << " ";
  }
  std::cout << std::endl;
  
  std::cout << "Minimum: " <<
    *getMinimumElement(array, array + arraySize) <<
    ", maximum: " << *getMaximumElement(array, array + arraySize) <<
    std::endl;
  
  delete [] array;
 
  std::cin.get();
  return 0;
}
Добавлено через 56 секунд
Цитата Сообщение от juliette250 Посмотреть сообщение
Спасибо огромное Leshak , но вы используете строки, которые мы еще не успели изучить
Это какие же?!
0
0 / 0 / 0
Регистрация: 26.03.2013
Сообщений: 5
28.03.2013, 17:27  [ТС]
Ой, про строки - это я поговорячилась((( Смотрела параллельно еще коды, а сообщение написала сюда. Перезанималась
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
28.03.2013, 17:27
Помогаю со студенческими работами здесь

максимум и минимум
Даны x, y, z. Вычислить a, b, используя приведенные ниже формулы. Получить max(a, b). a=\frac{1+{\sin...

Максимум и минимум
Пусть шесть населенных пунктов, обозначенные номерами от 1 до 6 (величина k), а пять кандидатов номерами от 1 до 5 (величина n). Кто из...

Минимум/максимум
Начинающий в ассемблере, помогите пожалуйста сделать данное задание. Задание: Решить данную формулу. То есть нужно максимальное...

Максимум и минимум
Заданны два числа.Определите какое из них больше,а какое меньше. Формат выходных данных В первую строку выведите квадрат большего...

Минимум и максимум
Найдите точки максимума и минимум функции


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

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru