Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 17.02.2012, 03:39   #1
noxior
Пользователь
 
Регистрация: 27.11.2011
Сообщений: 28
По умолчанию массив

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

вот её решение.....

Код:
#include <stdio.h>
#include <conio.h>
#define HB 5
void mainO
{
int a[HB];
int min;
int i;
printf("ХпПоиск минимального элемента массиваХп");
printf("Введите в одной строке элементы массиваЛп");
printf("%i целых чисел, и нажмите <Enter>\n", НВ);
printf("-> " );
for (i = 0; i < HB; i4-+)
scanf("%i",&a[i]);
min = 0 ; 
for (i = 1; i < HB; i++)
if (a[i] < a[min]) min = i;
printf("Минимальный элемент массива: " );
printf("a[%i]=%i ", min+1, a[min]);
printf("printf("\пДля завершения нажмите <Enter>");
getch();
}

а вот вопросы.....
как можно обойтись без #define HB 5, при этом все также обозначая размер массива любой переменной? типо такого
Код:
#include "stdafx.h"
int n; 
int x[n], min, i;


int main()
{
	n=5;
	std::cout<<"uiuui\n";
но начинает выбивать ошибку

c:\documents and settings\a\мои документы\visual studio 2008\projects\3\3\3.cpp(3) : error C2057: требуется константное выражение
c:\documents and settings\a\мои документы\visual studio 2008\projects\3\3\3.cpp(3) : error C2466: невозможно выделить память для массива постоянного нулевого размера

обьясните смысл этой строчки на пальцах плз
Код:
printf("a[%i]=%i ", min+1, a[min]);
заранее благодарен

Последний раз редактировалось Stilet; 17.02.2012 в 11:28.
noxior вне форума Ответить с цитированием
Старый 17.02.2012, 09:19   #2
-=zAA=-
Пользователь
 
Регистрация: 03.10.2011
Сообщений: 11
По умолчанию

самый простой способ это циклы.
я бы завёл переменную min и присвоил ей значение первого элемента матрицы, а затем if'ом в цикле сравнивал бы его с остальными элементами, и если нашел бы меньший элемент то присвоил бы переменной min найденное минимальное значение.


PS если не понятно то через часиков 5-6 закину код.
Глупый с мудрой книгой, в два раза глупее.
-=zAA=- вне форума Ответить с цитированием
Старый 17.02.2012, 14:25   #3
ElectroMent
Пользователь
 
Регистрация: 28.12.2011
Сообщений: 27
По умолчанию

Цитата:
как можно обойтись без #define HB 5, при этом все также обозначая размер массива любой переменной? типо такого
Код:
int n = 0; // количество элементов массива
int *massiv = NULL; // указатель на начало массив

cout << "Введите количество элементов\n"; 
cin >> n;

if( n > 0)
{
   massiv = new int [ n ]; // выделяем память для массива в куче
}

for( int i=0; i<n; i++ )
{
  cout << "Введите " << i << " элемент";
  cin >> massiv[i];
}

/// тут поиск минимума

// в конце освобождаем память
if( massiv )
	delete massiv;
ElectroMent вне форума Ответить с цитированием
Старый 17.02.2012, 16:23   #4
_Bers
Старожил
 
Регистрация: 16.12.2011
Сообщений: 2,329
По умолчанию

Код:
// в конце освобождаем память
if( massiv )
	delete massiv;
В чем заключается сакральный смысл проверки указателя на NULL перед удалением?
_Bers вне форума Ответить с цитированием
Старый 18.02.2012, 02:24   #5
noxior
Пользователь
 
Регистрация: 27.11.2011
Сообщений: 28
По умолчанию

помогите плиз построить так как подсказали, для примера неплохо былобы понять такой вариант решения
самый простой способ это циклы.
я бы завёл переменную min и присвоил ей значение первого элемента матрицы, а затем if'ом в цикле сравнивал бы его с остальными элементами, и если нашел бы меньший элемент то присвоил бы переменной min найденное минимальное значение.

Последний раз редактировалось noxior; 18.02.2012 в 02:37.
noxior вне форума Ответить с цитированием
Старый 18.02.2012, 19:17   #6
-=zAA=-
Пользователь
 
Регистрация: 03.10.2011
Сообщений: 11
По умолчанию

этот код написан на С, не С++ но работать должно ))


Код:
#include <stdio.h>

void main()
{
int a[5],min,i;

for(i=0;i<5;i++)
scanf("%d",&a[i]);

min=a[0];

for(i=1;i<5;i++)
	if(min>a[i])
	min=a[i];

printf("min=%d",min);
}
если в коде что-то непонятно то пишите в личку.
Глупый с мудрой книгой, в два раза глупее.
-=zAA=- вне форума Ответить с цитированием
Старый 18.02.2012, 20:11   #7
noxior
Пользователь
 
Регистрация: 27.11.2011
Сообщений: 28
По умолчанию

а вот мне подсказали шо както так можно обьявлять массив

int n,*a;

тут мы задали n-размер массива и a назвали его?
noxior вне форума Ответить с цитированием
Старый 18.02.2012, 20:45   #8
_Bers
Старожил
 
Регистрация: 16.12.2011
Сообщений: 2,329
По умолчанию

Цитата:
Сообщение от noxior Посмотреть сообщение
а вот мне подсказали шо както так можно обьявлять массив

int n,*a;

тут мы задали n-размер массива и a назвали его?
Нет. Тут объявлены две переменные, которые содержат мусор (или ноль)
_Bers вне форума Ответить с цитированием
Старый 18.02.2012, 21:08   #9
rmv240899
Форумчанин
 
Регистрация: 18.02.2012
Сообщений: 155
По умолчанию Вот более менее простой способ

Вот простой способ: сначала вводишь размер массива, объявляешь переменную min, потом вводишь элементы, инициализируешь min значением 0го элемента, и сравниваешь.
Вот код:
Код:
#include <iostream>
using namespace std;
void main()
{
	setlocale(LC_ALL,"");

	int n, *p, min;
	cout<<"Введите размер массива: ";
	cin>>n;

	p=new int[n];
	
	for(int i=0;i<n;i++)
	{
		cout<<"Введите значение элемента: ";
		cin>>p[i];
	}
	min=p[0];
	for(int i=0;i<n;i++)
	{
		if(p[i]<min)min=p[i];
	}
	cout<<min<<endl;
}
rmv240899 вне форума Ответить с цитированием
Старый 18.02.2012, 21:33   #10
-=zAA=-
Пользователь
 
Регистрация: 03.10.2011
Сообщений: 11
По умолчанию

Цитата:
Сообщение от noxior Посмотреть сообщение
а вот мне подсказали шо както так можно обьявлять массив

int n,*a;

тут мы задали n-размер массива и a назвали его?
тут задано целое число и указатель, к примеру указатель на данное число, массив объявляется так int a[c];
где а- имя массива c- кол-во элементов массива, вроде как кол-во элементов можно не указывать но этот способ фактически никто не рекомендует из за его невыгодности.
P.S. небольшой совет: купите книгу по интересующему вас языку программирования, желательно чтобы примеров было побольше и ищите там все непонятные моменты, но именно физически купить, а не скачать с инета, с физическим экземпляром легче намного, а купленный самоучитель вам очень поможет, потому как вопросы которые вы тут задаете примитивны и описаны в любом самоучителе.
Глупый с мудрой книгой, в два раза глупее.

Последний раз редактировалось -=zAA=-; 18.02.2012 в 21:38.
-=zAA=- вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
С# задан массив 5х5. сформировать массивы А и В. в массив А поместить элементы с четными индексами, в массив В с нечетны Koksa Помощь студентам 0 10.10.2011 11:26
Задан вектор X[20]. Положительные числа переписать в массив Y, а отрицательные в массив W leha_demi Помощь студентам 2 24.09.2011 18:12
Запись координат в массив в реал тайм, Как записать координаты в массив Dark19 Visual C++ 2 21.06.2011 18:45
Из массив А получить массив В, удвоив все нечётные элементы удвоены ( на Pascal) KARTER Помощь студентам 1 18.06.2011 19:58
Массив - Нужно написать массив и распечатать на экран с конца в начало(язык С++) econ Помощь студентам 1 29.05.2011 22:02