Технический форум
Вернуться   Технический форум > Программирование > Форум программистов > C/C++/С#


Ответ
 
Опции темы Опции просмотра
Старый 06.11.2011, 18:05   #1 (permalink)
smthelse
Новичок
 
Регистрация: 06.11.2011
Сообщений: 3
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
По умолчанию Помогите разобраться с С++

"Дан одномерный массив из N действительных случайных чисел в диапазоне от 1 до 50. Найти минимальный элемент среди элементов с нечетным индексом и максимальный среди элементов с четным."

только только знакомлюсь с языком С++(пошла на программиста). как можно вывести минимальный элемент среди элементов с нечетным индексом и максимальный среди элементов с четным
smthelse вне форума   Ответить с цитированием

Старый 06.11.2011, 18:05
Helpmaster
Member
 
Аватар для Helpmaster
 
Регистрация: 08.03.2016
Сообщений: 0

Пожалуйста, не делайте поспешный действий, лучше ознакомьтесь с похожими топиками

Помогите разобраться
Помогите разобраться

Старый 06.11.2011, 18:25   #2 (permalink)
AlexZir
support
 
Аватар для AlexZir
 
Регистрация: 19.08.2007
Адрес: Зея
Сообщений: 15,797
Записей в дневнике: 71
Сказал(а) спасибо: 166
Поблагодарили 203 раз(а) в 86 сообщениях
Репутация: 75760
По умолчанию

как вариант, анализируйте на четность/нечетность счетчик цикла, который обычно используется как индекс при обращении к элементам массива. Если нечетный - сравнивайте текущий элемент и предыдущий минимальный, если четный - сравнивайте текущий элемент и предыдущий максимальный. Естественно, результат сравнения должен привести либо к изменению значения минимального/максимального элемента, либо они должны остаться неизменными.
Определить четное или нечетное значение индекса можно обычным целочисленным делением, если остаток от деления на 2 равен 0, то элемент имеет четный индекс, иначе - нечетный.
AlexZir вне форума   Ответить с цитированием
Старый 06.11.2011, 18:34   #3 (permalink)
smthelse
Новичок
 
Регистрация: 06.11.2011
Сообщений: 3
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
По умолчанию

"если остаток от деления на 2 равен 0, то элемент имеет четный индекс, иначе - нечетный."
это я знаю..но не могу понять как это будет выглядеть на С++
какие операнты? в библиотеке не могу найти
smthelse вне форума   Ответить с цитированием
Старый 06.11.2011, 18:39   #4 (permalink)
Fenix
404
 
Аватар для Fenix
 
Регистрация: 10.01.2010
Сообщений: 1,749
Записей в дневнике: 5
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 3868
По умолчанию

% - остаток от деления.

a=i%2;

Переменной а будет присвоен остаток от деления пременной i на число 2.
Fenix вне форума   Ответить с цитированием
Старый 06.11.2011, 18:59   #5 (permalink)
AlexZir
support
 
Аватар для AlexZir
 
Регистрация: 19.08.2007
Адрес: Зея
Сообщений: 15,797
Записей в дневнике: 71
Сказал(а) спасибо: 166
Поблагодарили 203 раз(а) в 86 сообщениях
Репутация: 75760
По умолчанию

Вот алгоритм решения:
Код:
алг 
нач
  цел n
  n:=10
  вещтаб a[0:n]
  цел i 
  вещ maxa, mina
  нц для i от 0 до n
    a[i]:=rnd(50)
    вывод a[i],' '
  кц
  maxa:=a[0]
  mina:=a[1]
  нц для i от 2 до n
    если mod(i,2)=0
      то если a[i]<mina то mina:=a[i] все
      иначе если a[i]>maxa то maxa:=a[i] все
    все
  кц
  вывод 'min=',mina,'  '
  вывод 'max=',maxa
 кон
А уж в C++ вы это решение сами преобразуйте
AlexZir вне форума   Ответить с цитированием
Ads

Яндекс

Member
 
Регистрация: 31.10.2006
Сообщений: 40200
Записей в дневнике: 0
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 55070
Старый 08.11.2011, 14:55   #6 (permalink)
shrek=)
Студент БГПУ
 
Аватар для shrek=)
 
Регистрация: 06.02.2010
Сообщений: 420
Записей в дневнике: 3
Сказал(а) спасибо: 1
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 470
По умолчанию

А вот и код, если это еще актуально
Код:
#include <iostream>
#include <stdlib.h>
#include <time.h>
using namespace std;
int main ()
{
    srand(time(NULL));
    int n=10,i;
    float a[n],maxa,mina;
    for (int i=0; i<=n; i++)
    {
    a[i]=rand()%50;
    cout<<a[i]<<"  ";
}
    maxa=a[1];
    mina=a[0];
    for (i=0; i<=n;i++)
    {
    if (i%2==0)
    if (a[i]<mina) mina=a[i];
    if (a[i]>maxa) maxa=a[i];
}
    cout<<"\nmaximal \t"<<maxa<<endl;;
    cout<<"minimal \t"<<mina<<endl;;    
system ("pause");
}
shrek=) вне форума   Ответить с цитированием
Старый 12.11.2011, 22:49   #7 (permalink)
smthelse
Новичок
 
Регистрация: 06.11.2011
Сообщений: 3
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
По умолчанию

shrek, спасибо,вы используете BCB?
просто нам,студентам,говорят работать в вижуал с++..
smthelse вне форума   Ответить с цитированием
Старый 13.11.2011, 04:33   #8 (permalink)
Long Cat
Banned
 
Регистрация: 01.09.2009
Сообщений: 4,396
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 2544
По умолчанию

Код переносимый между компиляторами. И отвратный.
Решение на Паскале, переведенном ПРОМТОМ такое же отвратное, так как использует совершенно не нужную проверку на четность, а так же совершенно лишнее начало проверки с 0 элемента массива.

Более элегантное решение:
Код:
  const int msz=100500;
  cmax=a[0];
  cmin=a[1];
  for(int i=2;i<msz;i+=2)
  {
     if(cmax<a[i])
     {
        cmax=a[i];
     }
  }
  for(int i=3;i<msz;i+=2)
  {
     if(cmin>a[i])
     {
        cmin=a[i];
     }
  }
Работает гораздо быстрее, читается в разы удобнее.
Long Cat вне форума   Ответить с цитированием
Ads

Яндекс

Member
 
Регистрация: 31.10.2006
Сообщений: 40200
Записей в дневнике: 0
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 55070
Ответ

Метки
программирование, с++


Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Выкл.
HTML код Выкл.
Trackbacks are Вкл.
Pingbacks are Вкл.
Refbacks are Выкл.




Часовой пояс GMT +4, время: 14:03.

Powered by vBulletin® Version 6.2.5.
Copyright ©2000 - 2014, Jelsoft Enterprises Ltd.