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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> [С++] Найти произведение, Помогите плз! 
:(
    Опции темы
Sandr12
  Дата 2.3.2010, 22:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Задача:Найти произведение двух наибольших из 5 чисел.

 smile напишите пожалуйста код со всеми комментариями чтоб разобраться.

Добавлено через 1 минуту и 23 секунды
желательно с оператором выбора case.

Добавлено через 2 минуты и 41 секунду
Visual C++

PM MAIL   Вверх
ИванМ
Дата 2.3.2010, 23:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1260
Регистрация: 19.6.2006
Где: СПб

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



Код

#include <list>
#include <iostream>
#include <algorithm>

int main()
{
    std::list<double> arr;
    for(int i=1;i<=5;i++)
    {
        std::cout<<"Enter the item #"<<i<<":";
        double val;
        std::cin>>val;
        arr.push_back(val);
    }
    double m[2];
    arr.sort();
    arr.reverse();
    std::list<double>::iterator it=arr.begin();    
    m[0]=(*it);    
    m[1]=(*(++it));
    std::cout<<"Result = "<<m[0]*m[1]<<std::endl;
    system("pause");
}



Это сообщение отредактировал(а) ИванМ - 2.3.2010, 23:23
PM MAIL   Вверх
t_gran
Дата 3.3.2010, 06:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 621
Регистрация: 13.11.2007
Где: г.Усть-Илимск

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



ИванМ, ей богу, человек просит реализовать школьную задачку и плюс ещё разжевать, а вы ему STL. smile Не, я не спорю, реализация верная, но поймёт ли её создатель темы?
Код

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

using namespace std;

int main ()
{
   const int CLength= 5;            // Количество чисел
   int arr[CLength];                // Список чисел

   srand(time(NULL));               // А-ля randomize в Pasca-cale
   for (int i= 0; i < CLength; ++i) // Генерируем случайным обраом числа 0..9
   {                                // и выводим их на экран
      arr[i]= rand() % 10;
      cout << arr[i] << " ";
   }
   cout << endl;

   // Идея поиска наибольшего числа заключается в сравнении
   // певого эл-та с остальными и перемещением самого большого на
   // эту (т.е. первую) позицию. Аналогичные действия выполняются и
   // для второго эл-та. В результате выполнения двух вложенных циклов
   // на первых двух местах будут распологаться самые большие числа из
   // представленных в нашем массиве
   for (int j= 0; j < 2; ++j)             // Сначала обрабатываем первый, затем второй
      for (int i= j+1; i < CLength; ++i)  // Начинаем со следующей позиции и до конца
         if (arr[j] < arr[i])             // Если больший эл-нт то меняем местами
         {
            int buff= arr[j];
            arr[j]= arr[i];
            arr[i]= buff;
         }

   cout << "result: " << arr[0]*arr[1] << endl;
   return 0;
}



--------------------
Я знаю, что ничего не знаю© Сократ
user posted image
PM MAIL WWW   Вверх
Sandr12
Дата 3.3.2010, 14:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Visual C++

Добавлено позже
t_gran, ошибка:
--------------------Configuration: laba - Win32 Debug--------------------
Compiling...
laba.cpp
c:\microsoft visual studio\myprojects\laba\laba.cpp(33) : fatal error C1010: unexpected end of file while looking for precompiled header directive
Error executing cl.exe.

laba.obj - 1 error(s), 0 warning(s)


а почему нет оператора case?

название темы в методичке:
"Условные операторы.Оператор выбора case."

Добавлено через 1 минуту и 49 секунд
t_gran, ошибка:
--------------------Configuration: laba - Win32 Debug--------------------
Compiling...
laba.cpp
c:\microsoft visual studio\myprojects\laba\laba.cpp(33) : fatal error C1010: unexpected end of file while looking for precompiled header directive
Error executing cl.exe.

laba.obj - 1 error(s), 0 warning(s)


а почему нет оператора case?

название темы в методичке:
"Условные операторы.Оператор выбора case."

Добавлено через 2 минуты и 42 секунды
упс))
дабл)

PM MAIL   Вверх
jhonyxakep
Дата 3.3.2010, 15:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Divide Et Impera
**


Профиль
Группа: Участник
Сообщений: 983
Регистрация: 7.4.2009
Где: Что, Когда?

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



Цитата(Sandr12 @  3.3.2010,  14:46 Найти цитируемый пост)
а почему нет оператора case?

 smile А зачем он тут нужен. Код просто сортирует массив, и умножает 2 последних эл-та - которые являются наибольшими.

Цитата(Sandr12 @  3.3.2010,  14:46 Найти цитируемый пост)
t_gran, ошибка:--------------------Configuration: laba - Win32 Debug--------------------Compiling...laba.cppc:\microsoft visual studio\myprojects\laba\laba.cpp(33) : fatal error C1010: unexpected end of file while looking for precompiled header directiveError executing cl.exe.laba.obj - 1 error(s), 0 warning(s)


Возм. осбоенность компилятора, попробуй так:

Код

#include "stdafx.h" 
#include <iostream>
#include <stdlib.h>
#include <time.h>

using namespace std;

int main (void)
{
   const int CLength= 5;            // Количество чисел
   int arr[CLength];                // Список чисел

   srand(time(NULL));               // А-ля randomize в Pasca-cale
   for (int i= 0; i < CLength; ++i) // Генерируем случайным обраом числа 0..9
   {                                // и выводим их на экран
      arr[i]= rand() % 10;
      cout << arr[i] << " ";
   }
   cout << endl;

   // Идея поиска наибольшего числа заключается в сравнении
   // певого эл-та с остальными и перемещением самого большого на
   // эту (т.е. первую) позицию. Аналогичные действия выполняются и
   // для второго эл-та. В результате выполнения двух вложенных циклов
   // на первых двух местах будут распологаться самые большие числа из
   // представленных в нашем массиве
   for (int j= 0; j < 2; ++j)             // Сначала обрабатываем первый, затем второй
      for (int i= j+1; i < CLength; ++i)  // Начинаем со следующей позиции и до конца
         if (arr[j] < arr[i])             // Если больший эл-нт то меняем местами
         {
            int buff= arr[j];
            arr[j]= arr[i];
            arr[i]= buff;
         }

   cout << "result: " << arr[0]*arr[1] << endl;
  
  system("PAUSE"); //или cin.get(); 
  
   return 0;
}



t_gran, зачем хидер тайм поставил?


Sandr12, проще говоря забиваешь то что тебе нужно в массив,

Код

 for (int j= 0; j < 2; ++j)             // Сначала обрабатываем первый, затем второй
      for (int i= j+1; i < CLength; ++i)  // Начинаем со следующей позиции и до конца
         if (arr[j] < arr[i])             // Если больший эл-нт то меняем местами
         {
            int buff= arr[j];
            arr[j]= arr[i];
            arr[i]= buff;
         }

сортируешь (пузырекsmile),


Цитата(t_gran @  3.3.2010,  06:19 Найти цитируемый пост)
cout << "result: " << arr[0]*arr[1] << endl;


вычисляешь про-е, и выводишь.
PM MAIL ICQ   Вверх
Sandr12
Дата 3.3.2010, 19:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



jhonyxakep, спасибо большое)))
всё получилось!)
PM MAIL   Вверх
t_gran
Дата 4.3.2010, 03:40 (ссылка) |    (голосов:2) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 621
Регистрация: 13.11.2007
Где: г.Усть-Илимск

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



Не могу не прокомментировать. smile

Цитата

t_gran, зачем хидер тайм поставил?

Для этого:
Код

   ...
   srand(time(NULL));               // А-ля randomize в Pasca-cale
   ...




--------------------
Я знаю, что ничего не знаю© Сократ
user posted image
PM MAIL WWW   Вверх
mrbrooks
Дата 4.3.2010, 09:23 (ссылка) |    (голосов:2) Загрузка ... Загрузка ... Быстрая цитата Цитата


трололомен
****


Профиль
Группа: Завсегдатай
Сообщений: 4259
Регистрация: 4.10.2006
Где: Дол Гулдур

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



t_gran, для хакера это просто не очевидно  smile 
PM MAIL   Вверх
jhonyxakep
Дата 4.3.2010, 11:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Divide Et Impera
**


Профиль
Группа: Участник
Сообщений: 983
Регистрация: 7.4.2009
Где: Что, Когда?

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



Цитата(t_gran @  4.3.2010,  03:40 Найти цитируемый пост)
srand(time(NULL));               // А-ля randomize в Pasca-cale

 smile кстати MinGW имеет тенденцию не обращать внимания на srand.
PM MAIL ICQ   Вверх
t_gran
Дата 5.3.2010, 03:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 621
Регистрация: 13.11.2007
Где: г.Усть-Илимск

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



Цитата

t_gran, для хакера это просто не очевидно   

 smile 

Цитата

кстати MinGW имеет тенденцию не обращать внимания на srand. 

Да ну?!  smile

Первый раз такое слышу!  smile

Это сообщение отредактировал(а) t_gran - 5.3.2010, 03:33


--------------------
Я знаю, что ничего не знаю© Сократ
user posted image
PM MAIL WWW   Вверх
jhonyxakep
Дата 5.3.2010, 11:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Divide Et Impera
**


Профиль
Группа: Участник
Сообщений: 983
Регистрация: 7.4.2009
Где: Что, Когда?

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



Цитата(t_gran @  5.3.2010,  03:31 Найти цитируемый пост)
Да ну?!  Первый раз такое слышу!  

 smile Уже какой раз натыкаюсь на такую проблему, потом просто стал генерить рандом по времениsmile
PM MAIL ICQ   Вверх
Dov
Дата 6.3.2010, 00:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


аСинизатор
***


Профиль
Группа: Завсегдатай
Сообщений: 1721
Регистрация: 10.5.2003
Где: Эрец-Исраэль

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



Ещё вариант с STL:
Код
int main()
{
    srand((unsigned)time(NULL));
    vector<int> v(5);     

    cout << "source: " ;
    for(vector<int>::size_type i = 0; i < v.size(); i++)
        cout << (v[i] = rand() % 20 + 1) << " ";    

    partial_sort(v.begin(), v.begin() + 2, v.end(), greater<int>());

    cout << "\nresult: " << v[0] << " x " << v[1] << " = " << v[0] * v[1] << endl;
    return 0;
}


Цитата(t_gran @  3.3.2010,  05:19 Найти цитируемый пост)
 В результате выполнения двух вложенных циклов

Поскольку однопроходный вариант (т.е. с одним циклом) никто не предложил, то я объявляю конкурс.
Три человека, которые первыми напишут работающий вариант(без использования STL и других сторонних библиотек) c одним проходом по массиву, получат от меня в репу.  smile 
Если кто-то захочет поучаствовать в этом безобразии, то не публикуйте здесь свои ответы(что бы не подсказывать другим), а посылайте мне на PM, а здесь  напишите только одно слово:  замутил, что бы народ видел сколько человек уже написали свои варианты. Потом я выложу здесь правильные решения. 
Задачка довольно простая, по-этому время на её решение будет, скорее всего, ограничено... так что, поторопитесь...  smile  

Итак, время пошло!!!   Желаю удачи!!! 

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






--------------------
Тут вечности запах томительный,
И свежие фрукты дешевые, 
А климат у нас – изумительный, 
И только соседи – #уевые. 
                           Игорь Губерман.
PM   Вверх
Dov
Дата 6.3.2010, 01:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


аСинизатор
***


Профиль
Группа: Завсегдатай
Сообщений: 1721
Регистрация: 10.5.2003
Где: Эрец-Исраэль

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



Можно использовать такой шаблон:
Код
int main()
{
    srand((unsigned)time(NULL)); 
    
    const int SIZE = 5;
    int       arr[SIZE];
    // ... другие переменные, если нужно...

    // заполнение и вывод исходного массива...    
    cout << "source: " ;
    for(int i = 0; i < SIZE; i++) 
        cout << (arr[i] = rand() % 20 + 1) << ' ';
    
    // рабочий процесс и решение задачи, состоящее из одного цикла
    // ...


    // вывод результата:
    cout << "\nresult: " << /* max1 */ << " x " << /* max2 */ << " = " << /* max1 * max2 */ << endl;
    return 0;
}



--------------------
Тут вечности запах томительный,
И свежие фрукты дешевые, 
А климат у нас – изумительный, 
И только соседи – #уевые. 
                           Игорь Губерман.
PM   Вверх
Letov
Дата 6.3.2010, 03:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Цитата(Dov @ 6.3.2010,  01:43)
Ещё вариант с STL:
Код
int main()
{
    srand((unsigned)time(NULL));
    vector<int> v(5);     

    cout << "source: " ;
    for(vector<int>::size_type i = 0; i < v.size(); i++)
        cout << (v[i] = rand() % 20 + 1) << " ";    

    partial_sort(v.begin(), v.begin() + 2, v.end(), greater<int>());

    cout << "\nresult: " << v[0] << " x " << v[1] << " = " << v[0] * v[1] << endl;
    return 0;
}


Цитата(t_gran @  3.3.2010,  05:19 Найти цитируемый пост)
 В результате выполнения двух вложенных циклов

Поскольку однопроходный вариант (т.е. с одним циклом) никто не предложил, то я объявляю конкурс.
Три человека, которые первыми напишут работающий вариант(без использования STL и других сторонних библиотек) c одним проходом по массиву, получат от меня в репу.  smile 
Если кто-то захочет поучаствовать в этом безобразии, то не публикуйте здесь свои ответы(что бы не подсказывать другим), а посылайте мне на PM, а здесь  напишите только одно слово:  замутил, что бы народ видел сколько человек уже написали свои варианты. Потом я выложу здесь правильные решения. 
Задачка довольно простая, по-этому время на её решение будет, скорее всего, ограничено... так что, поторопитесь...  smile  

Итак, время пошло!!!   Желаю удачи!!! 

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

замутил


--------------------
Не бывает плохих языков программирования. Бывают плохие программисты...

PM MAIL   Вверх
Dov
Дата 9.3.2010, 14:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


аСинизатор
***


Профиль
Группа: Завсегдатай
Сообщений: 1721
Регистрация: 10.5.2003
Где: Эрец-Исраэль

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



Ну что? Выходные и праздники прошли. Завтра вечером подведём наши не утешительные итоги...   smile 


--------------------
Тут вечности запах томительный,
И свежие фрукты дешевые, 
А климат у нас – изумительный, 
И только соседи – #уевые. 
                           Игорь Губерман.
PM   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Центр помощи"

ВНИМАНИЕ! Прежде чем создавать темы, или писать сообщения в данный раздел, ознакомьтесь, пожалуйста, с Правилами форума и конкретно этого раздела.
Несоблюдение правил может повлечь за собой самые строгие меры от закрытия/удаления темы до бана пользователя!


  • Название темы должно отражать её суть! (Не следует добавлять туда слова "помогите", "срочно" и т.п.)
  • При создании темы, первым делом в квадратных скобках укажите область, из которой исходит вопрос (язык, дисциплина, диплом). Пример: [C++].
  • В названии темы не нужно указывать происхождение задачи (например "школьная задача", "задача из учебника" и т.п.), не нужно указывать ее сложность ("простая задача", "легкий вопрос" и т.п.). Все это можно писать в тексте самой задачи.
  • Если Вы ошиблись при вводе названия темы, отправьте письмо любому из модераторов раздела (через личные сообщения или report).
  • Для подсветки кода пользуйтесь тегами [code][/code] (выделяйте код и нажимаете на кнопку "Код"). Не забывайте выбирать при этом соответствующий язык.
  • Помните: один топик - один вопрос!
  • В данном разделе запрещено поднимать темы, т.е. при отсутствии ответов на Ваш вопрос добавлять новые ответы к теме, тем самым поднимая тему на верх списка.
  • Если вы хотите, чтобы вашу проблему решили при помощи определенного алгоритма, то не забудьте описать его!
  • Если вопрос решён, то воспользуйтесь ссылкой "Пометить как решённый", которая находится под кнопками создания темы или специальным флажком при ответе.

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

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

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


 




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


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

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