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

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

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 10, средняя оценка - 4.70
juliette250
0 / 0 / 0
Регистрация: 26.03.2013
Сообщений: 5
27.03.2013, 02:16     Массивы и указатели, поиск минимум-максимум #1
Здравствуйте! Помогите, пожалуйста, никак не даются указатели, я их уже и так, и сяк кручу, а понимание не приходит... Без указателей - все работает, а здесь по условию нужно именно с ними...

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

Код
#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;
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
27.03.2013, 02:16     Массивы и указатели, поиск минимум-максимум
Посмотрите здесь:

C++ Минимум/максимум в матрице
C++ Найти максимум и минимум массив
максимум и минимум C++
Минимум и максимум массива C++
C++ Минимум и максимум в двумерном массиве
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Leshak
259 / 235 / 40
Регистрация: 10.12.2011
Сообщений: 513
27.03.2013, 03:44     Массивы и указатели, поиск минимум-максимум #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
#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;
}
Shaman_UK
0 / 0 / 0
Регистрация: 27.03.2013
Сообщений: 4
27.03.2013, 05:31     Массивы и указатели, поиск минимум-максимум #3
*(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");
    }
juliette250
0 / 0 / 0
Регистрация: 26.03.2013
Сообщений: 5
28.03.2013, 02:31  [ТС]     Массивы и указатели, поиск минимум-максимум #4
Спасибо огромное Leshak , но вы используете строки, которые мы еще не успели изучить, так что этот вариант пока оставлю "на будущее")
Shaman_UK тоже крутилось в голове *(ar + i), но делала все время ошибку (видно, я действительно плохо понимаю указатели), которая не позволяла решить задачу! Спасибо за ваш вариант!
taras atavin
Ушёл с форума.
 Аватар для taras atavin
3569 / 1752 / 91
Регистрация: 24.11.2009
Сообщений: 27,619
28.03.2013, 06:09     Массивы и указатели, поиск минимум-максимум #5
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 восстанавливает индекс по указателям и ничего на этом не выигрывает, эта функция будет лучше с перебором индексов, а не указателей, с адресной арифмметикой только внутри опреатора "квадратные скобки", но для демонстрации пойдёт.
lemegeton
 Аватар для lemegeton
2910 / 1339 / 133
Регистрация: 29.11.2010
Сообщений: 2,720
28.03.2013, 08:17     Массивы и указатели, поиск минимум-максимум #6
Предполагаю, что арфиметику указателей учат уже зная, что такое указатель и как выделять память.
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 , но вы используете строки, которые мы еще не успели изучить
Это какие же?!
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
28.03.2013, 17:27     Массивы и указатели, поиск минимум-максимум
Еще ссылки по теме:

C++ Двумерные массивы Найти минимум получить новую матрицу деленные на минимум
C++ Задача на максимум и минимум
Найти максимум и минимум в матрице C++

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

Или воспользуйтесь поиском по форуму:
juliette250
0 / 0 / 0
Регистрация: 26.03.2013
Сообщений: 5
28.03.2013, 17:27  [ТС]     Массивы и указатели, поиск минимум-максимум #7
Ой, про строки - это я поговорячилась((( Смотрела параллельно еще коды, а сообщение написала сюда. Перезанималась
Yandex
Объявления
28.03.2013, 17:27     Массивы и указатели, поиск минимум-максимум
Ответ Создать тему
Опции темы

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