Модераторы: bsa
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Массивы, Поиск минимального индекса 
:(
    Опции темы
Belirafor
  Дата 12.3.2010, 18:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 29
Регистрация: 15.8.2009

Репутация: нет
Всего: нет



Вот собственно задача: 
Дан одномерный массив. Необходимо вывести на экран индексы максимального и минимального элементов данного массива.

Вот что у меня:
Код

#include <cstdlib>
#include <iostream>

using namespace std;

int main()
{
    cout << "Дан одномерный массив, размерности n,\n";
    cout << "необходимо вывести на экран индексы\n";
    cout << "максимального и минимального элементов\n";
    cout << "данного массива.\n";
    cout << endl;

    const int n = 12;
    int mass[n], i;

    cout << "Массив размерности [" << n << "]: ";
    srand(time(NULL));
    for (i = 0; i < n; i++)
    {
        mass[i] = random()%99;
        cout << mass[i] << " ";
    }
    cout << endl;

    for (i = 0; i < n - 1; i++)
    {
        int tmp;
        int iMin = i;
        for(tmp = i + 1; tmp < n; tmp++)
            if(mass[tmp] < mass[iMin]) iMin = tmp;
        i = iMin;
        cout << "Индекс минимального элемента: ";
        cout << i << " ";break;
    }
    return 0;
}


Сперва попробовал вывести индекс минимального элемента. Все работает хорошо, но опытный программист сразу заметит непорядок в строчке 34. Оператор break. Если его убрать, то компилятор выводит сразу несколько индексов, причем первым он выводит минимальный индекс, а  + к нему еще несколько (они явно не в порядке возрастания). Так вот собственно и вопрос: как вывести этот минимальный индекс, без использования оператора break?
Просьба готовых решений не выкладывать. Лучше советом. Заранее спасибо! =)
PM MAIL   Вверх
mes
Дата 12.3.2010, 18:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


Профиль
Группа: Участник Клуба
Сообщений: 7954
Регистрация: 14.1.2006

Репутация: 79
Всего: 250



Цитата(Belirafor @  12.3.2010,  17:08 Найти цитируемый пост)
сразу заметит непорядок в строчке 34. Оператор break. 


break не является источником беспорядка, если применен логически правильно.
Нахождение чего либо в цикле -  вполне нормально с использованием  break.

Другой вопрос, что в стл есть готовые алгоритмы, не требующие применения цикла, но до них вначале нужно набраться опыта..
Для примера для вашей задачи : http://cplusplus.com/reference/algorithm/min_element/


--------------------
PM MAIL WWW   Вверх
Belirafor
Дата 12.3.2010, 18:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 29
Регистрация: 15.8.2009

Репутация: нет
Всего: нет



mes, спасибо. Просто мне говорили, что есть иные, более простые пути решения данной задачи. Но поскольку я новичок, буду довольствоваться и этим. =)
PM MAIL   Вверх
mes
Дата 12.3.2010, 18:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


Профиль
Группа: Участник Клуба
Сообщений: 7954
Регистрация: 14.1.2006

Репутация: 79
Всего: 250



Цитата(Belirafor @  12.3.2010,  17:27 Найти цитируемый пост)
Просто мне говорили, что есть иные, более простые пути решения данной задачи. Но поскольку я новичок, буду довольствоваться и этим. =)

я говорил про наличие/отсутствие break, а не про Вашу реализацию smile
что касается реализации, то вы переборщили с кол-вом  уровней цикла.. 
одного вполне достаточно - внутреннего smile


--------------------
PM MAIL WWW   Вверх
Trotter
Дата 12.3.2010, 19:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 122
Регистрация: 24.10.2006
Где: Нижний Новгород

Репутация: нет
Всего: 0



Цитата

 for (inti = 0; i < n - 1; i++)


а что в С++ терь переменные не надо объявлять ?
PM MAIL ICQ   Вверх
Belirafor
Дата 12.3.2010, 19:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 29
Регистрация: 15.8.2009

Репутация: нет
Всего: нет



Цитата(Trotter @ 12.3.2010,  19:17)
Цитата

 for (inti = 0; i < n - 1; i++)


а что в С++ терь переменные не надо объявлять ?

а зачем ее второй раз объявлять? Она же объявлена вначале программы...
PM MAIL   Вверх
Trotter
Дата 12.3.2010, 19:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 122
Регистрация: 24.10.2006
Где: Нижний Новгород

Репутация: нет
Всего: 0



да да, сори, просмотрел
да так куда удобней юзать... 

Это сообщение отредактировал(а) Trotter - 12.3.2010, 19:25
PM MAIL ICQ   Вверх
mes
Дата 12.3.2010, 19:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


Профиль
Группа: Участник Клуба
Сообщений: 7954
Регистрация: 14.1.2006

Репутация: 79
Всего: 250



Цитата(Trotter @  12.3.2010,  18:24 Найти цитируемый пост)
да так куда удобней юзать... 

не сказал бы...


--------------------
PM MAIL WWW   Вверх
Trotter
Дата 12.3.2010, 19:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 122
Регистрация: 24.10.2006
Где: Нижний Новгород

Репутация: нет
Всего: 0



как эту же прогу кто нито может переписать на Си ? а то у меня не работает (((

Код

#include <stdio.h>
#include <stdlib.h>
#include <time.h>

int main()
{
 const int b = 40;
 int i;
 srand (time(NULL));
 int mass[b];
 for(i = 0; i<b; i++)
 {
 mass[i]=rand() %300 -150;
 printf("%d ", mass[i]);
 }
for (i = 0; i < b -1; i++)
{
int tmp;
int Min = i;
for(tmp = i + 1; tmp < b; tmp++)
if (mass[tmp] < mass[Min]) Min = tmp;
i = Min;
printf("%d       \n",i);
break;
}
return 0;
 }


PM MAIL ICQ   Вверх
mes
Дата 12.3.2010, 19:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


Профиль
Группа: Участник Клуба
Сообщений: 7954
Регистрация: 14.1.2006

Репутация: 79
Всего: 250



Цитата(Trotter @  12.3.2010,  18:54 Найти цитируемый пост)
а то у меня не работает (((

ошибки в студию 


--------------------
PM MAIL WWW   Вверх
Trotter
Дата 12.3.2010, 20:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 122
Регистрация: 24.10.2006
Где: Нижний Новгород

Репутация: нет
Всего: 0



http://i058.radikal.ru/1003/42/58fe6768c18c.jpg
да я слепой сори))

Это сообщение отредактировал(а) Trotter - 12.3.2010, 20:10
PM MAIL ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Для новичков"
JackYF
bsa

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.0555 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.