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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Минимальный элемент в массиве 
:(
    Опции темы
SkoobyDoo
Дата 19.12.2008, 19:40 (ссылка) |  (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Доброго времени суток! Помогите разобратся, пытаюсь найти минимальный элемент массива. При вводе чисел в массив от 1 до 6, программа выдает в результате 6! Как это так? 
Вывод:
Код

mojo@host:~$ ./problem_2 
Введите элемент B[0]: 1
Введите элемент B[1]: 2
Введите элемент B[2]: 3
Введите элемент B[3]: 4
Введите элемент B[4]: 5
Введите элемент B[5]: 6
Мин. элемент 6 с индексом 5

Код:
Код

#include <stdio.h>

#define BSIZE 6        // Размер массива B

int main( void ) 
{
    int B[BSIZE];
        // Заполняем числами массив B
    for ( int j = 0; j < BSIZE; j++ )
    {
        printf("Введите элемент B[%d]: ", j);
        scanf("%d", &B[j]);
    }

    int min, index_min;

    for ( int x = 0; x < BSIZE; x++ )
    {
        for ( int z = 0; z < BSIZE; z++ )
        {
            if( B[x] > B[z] )
            {
                min = B[z];
                index_min = z;
            }     
            else 
            { 
                min = B[x];
                index_min = x;
            }
        }
    }

    printf("Мин. элемент %d с индексом %d\n", min, index_min);

    return 0;
}



Это сообщение отредактировал(а) SkoobyDoo - 19.12.2008, 19:57
PM MAIL   Вверх
FoV
Дата 19.12.2008, 19:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Код

int min = 0,index_min;;
for ( int x = 0; x < BSIZE; x++ )
{
   if(B[i] < min){
      min = B[x];
      index_min = i;
    }
}



Это сообщение отредактировал(а) FoV - 19.12.2008, 20:21
PM MAIL   Вверх
avlzll
Дата 19.12.2008, 20:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



FoV , это неправильно. 

Тогда так уж.

Код


int min = 0, index_min = 0;
min = B[0];
for ( int i = 1; i < BSIZE; i++ )
{
   if (B[i] < min) {
      min = B[i];
      index_min = i;
    }
}



Это сообщение отредактировал(а) avlzll - 19.12.2008, 20:06
PM MAIL   Вверх
SkoobyDoo
Дата 19.12.2008, 20:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Код

Введите элемент B[0]: 1
Введите элемент B[1]: 2
Введите элемент B[2]: 3
Введите элемент B[3]: 4
Введите элемент B[4]: 5
Введите элемент B[5]: 6
B[-1076509688]: 1


Это сообщение отредактировал(а) SkoobyDoo - 19.12.2008, 20:06
PM MAIL   Вверх
FoV
Дата 19.12.2008, 20:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



avlzll
Ну да,твой вариант правильнее,хотя мой тоже работать будет. 
PM MAIL   Вверх
SkoobyDoo
Дата 19.12.2008, 20:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



извините пожалуйста, вы бы не могли подсказать как отсортировать массив и все элементы записать в другой массив по убыванию?
PM MAIL   Вверх
mes
Дата 19.12.2008, 20:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


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


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

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



Цитата(FoV @  19.12.2008,  20:08 Найти цитируемый пост)
Ну да,твой вариант правильнее,хотя мой тоже работать будет. 

позвольте узнать, каким таким чудом ?  smile 
Цитата(FoV @  19.12.2008,  19:56 Найти цитируемый пост)
for ( int x = 0; x < BSIZE; x++ )
{
   if(B[i] < min){

переменая цикла х, а используйте для доступа к элементу i 

ну а во вторых после  min=0,  минимальное в цикле сможет найтись  только  если присутствуют отрицательные значения.


Это сообщение отредактировал(а) mes - 19.12.2008, 20:20


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


Новичок



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

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



SkoobyDoo
Код

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

#define BSIZE 6        // Размер массива B

int main( void ) 
{
    int B[BSIZE];
        // Заполняем числами массив B
    for ( int j = 0; j < BSIZE; j++ )
    {
        printf("Введите элемент B[%d]: ", j);
        scanf("%d", &B[j]);
    }

    int min = B[0], index_min = 0;
    for ( int i = 1; i < BSIZE; i++ )
{
   if (B[i] < min) {
      min = B[i];
      index_min = i;
    }
}
    printf("Element:%d index: %d",min,index_min);
    system("pause");

}

SkoobyDoo, 
Это вывод минимального элемента и его индекса,рабочий,я проверил.

Добавлено @ 20:17
Цитата(mes @  19.12.2008,  20:15 Найти цитируемый пост)
переменая цикла х, а используйте для доступа к элементу i 

Точно,очепятка smile 

Это сообщение отредактировал(а) FoV - 19.12.2008, 20:20
PM MAIL   Вверх
SkoobyDoo
Дата 19.12.2008, 20:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Вообще задача такая:
Даны два массива А1 .. А10 и В1 .. В12
в каждом их них есть нескоколько одинаковых минимальных элементов
вывести их индексы по массиву А и массиву В.

Я хотел отсортировать массив B по убыванию (пологаю индексы надо сохранить в другой массив) smile и затем через цикл сравнивать с массивом A и выводить индексы одинаковых элементов. Как думаете?

Ребят! помогите а? smile завтра сдать надо :( 

Это сообщение отредактировал(а) SkoobyDoo - 19.12.2008, 20:37
PM MAIL   Вверх
mes
Дата 19.12.2008, 20:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


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


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

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



непонял насколько пересекаются эти массивы . 

вывести все индексы минимального значения :
1. для массива А [1..10]
2. для массива А [1..12]
так ?

P.S.  индексы  с единицы  smile - наверно задание с паскаля портировано.


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


Новичёк
*


Профиль
Группа: Участник
Сообщений: 77
Регистрация: 26.6.2006
Где: 3-я планета от со лнца

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



Цитата(SkoobyDoo @  19.12.2008,  20:27 Найти цитируемый пост)
в каждом их них есть нескоколько одинаковых минимальных элементов

Извини, не могу вкурить в то, что это значит. Приведи пример.
PM MAIL   Вверх
SkoobyDoo
Дата 19.12.2008, 21:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Например даны два массива:
Код

A[0]: 5     B[0]: 3
A[1]: 1     B[1]: 15
A[2]: 3     B[2]: 10
A[3]: 2     B[3]: 2
A[4]: 9     B[4]: 1
                B[5]: 4


Надо вывести:
Код

A[1] = B[4]
A[3] = B[3]
A[2] = B[0]
...

Вот.

Это сообщение отредактировал(а) SkoobyDoo - 19.12.2008, 21:22
PM MAIL   Вверх
mes
Дата 19.12.2008, 21:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


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


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

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



а для такого массива 
Цитата

А     B
1     4
3     4 
4     3
4     3


что надо вывести ?


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


Шустрый
*


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

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



Цитата(mes @ 19.12.2008,  21:24)
а для такого массива 
Цитата

А     B
1     4
3     4 
4     3
4     3


что надо вывести ?

A[1] = B[3]
A[2] = B[0]

по одному совпадению
PM MAIL   Вверх
mes
Дата 19.12.2008, 22:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


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


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

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



вот набросок:
Код

#include <iostream>

int mas1 [] = { 1, 2,4,4,3,-6,-4}; // первый массив для теста
int mas2 [] = { -6, 1,2,4,3,4}; // второй массив для теста
const int size1 = sizeof(mas1)/sizeof(int*); // рамер первого массива
const int size2 = sizeof(mas2)/sizeof(int*); // рамер второго массива
int mas[size1];

void swap (int& x, int& y) { int i=x; x=y; y=i; }  // обмен значений

int min (int * begin, int * end) // поиск минимального в ряду
{
    int min=*begin;
    for (int *p =begin+1; p<end; ++p) if (min>*p) min=*p;
    return min;
}

void copy (int * begin, int * end, int *dst) // копирование элементов массива
{
    for (int *p =begin; p<end; ++p,++dst) *dst = *p;
}

void sort (int * begin, int * end) // сортировка
{
    for (int *p =begin+1; p<end; ++p)
    for (int *p1 =p; p1>begin; --p1)
    if (*p1 < *(p1-1)) swap (*p1,*(p1-1));
    else break;
}

int * find (int * begin, int * end, int key)
{
     for (int *p =begin; p<end; ++p) if (*p==key) return p; // если ключ найден то возвращает указатель на элеммент
     return end; // иначе указатель на конец
}

void print (const char * text, int* begin, int * end) // тестовый вывод
{
    std::cout << text <<*begin;
    for (int *p =begin+1; p<end; ++p)
    std::cout<<", "<<*p;
    std::cout <<". "<<std::endl;
}

int main( void )
{

     int * end1 = mas1+size1;// расчитываем конец первого массива
     int * end2 = mas2+size2;// расчитываем конец второго массива

     copy (mas1, end1, &mas[0]);  // копируем в дополнительный масссив
     int * end = mas+size1;     //расчитываем конец дополнительного массива
     print ("after copy : ", mas, end); // тест

     sort (mas, end); // сортируем дополнительный массив
     print ("after sort : ", mas, end); // тест

     std::cout <<std::endl;

     for (int *p=mas; p<end; ++p)
     {
        if (p!=end) if (*p==*(p+1)) continue;  // отсеивание неуникальных значений для сортированного массива
        int * p1 = find (mas1, end1, *p); // поиск текущего значения в первом массиве
        int * p2 = find (mas2, end2, *p); // поиск текущего значения вo втором массиве

        if (p1!=end1 && p2 != end2) // если найденны значения в обоих массивах
        {
           std::cout << "A["<<p1-mas1<<"]=B["<<p2-mas2<<"]="<<*p<<std::endl;
        }

     }

    std::cout <<std::endl;

    system("pause");
}



примечание : end указывает на следующий элемент после последнего.
то есть если надо к примеру скопировать один элемент то copy (mas, mas+1, ...);


Это сообщение отредактировал(а) mes - 20.12.2008, 02:47


--------------------
PM MAIL WWW   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Для новичков"
JackYF
bsa

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

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

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

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


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

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


 




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


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

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