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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 05.11.2014, 21:08   #1
Алексей_2012
t45t
Участник клуба
 
Аватар для Алексей_2012
 
Регистрация: 20.03.2012
Сообщений: 1,849
По умолчанию ОДномерный массив, второй по величине элемент, как его найти?

Здравствуйте! помогите, пожалуйста, исправить код, все работает отлично, но максимальный элемент ищется не тот, формулировка такая:

ввод массива из 50 вещественных элементов, поиск второго по велечене элемента (который после максимума), и посчитать число вхождений этого элемента в массив, вот мой код:

Код:
#include <QCoreApplication>
#include <qmath.h>
#include<qmath.h>
#include <ctime>
int main(int argc, char *argv[])
{
    QCoreApplication a(argc, argv);
    srand(time(NULL));
    const int n=50;
    float arr[n];

    for (int i=0; i<n;i++)
    {
        arr[i]=rand()%200;
        printf("%f;  ",arr[i]);
        if (i%4==3) printf("\n");//для наглядности
    }

    printf("\n----------------------------------------------\n");





// поиск второго по величине элемента
    int max,buf;
max=arr[0];
    for (int i=1;i<n;i++)
    {
        if (arr[i]>=arr[i-1])       max=arr[i];
      if (arr[i]<max)       buf=arr[i];

    }
   
max=buf;



// подсчет вхождений
    int count=0;
    for (int i=0;i<n;i++) {
        count+=(arr[i]==max);
        printf("%f;  ",arr[i]);

        if (i%4==3) printf("\n"); //для наглядности
    }
    printf("\n----------------------------------------------\n");
    if (count>0)
       {

        printf("\n iskomoe chislo: %d",max);
        printf("\n Bsego Bxogenii: %d",count);}
    else
        printf("\nNET BXOGENII ");

    return a.exec();
}
Все было бы отлично, решал задачу используя сортировку и простой

arr[n-2], но преподаватель сказал что нужно делать именно без сортировки (почему-то только мне)

в общем ничего в голову не пришло, кроме как найти максимум, потом проверить условие: если i элемент строго меньше максимума, то это и есть второй по величине элемент, в общем жду от вас помощи, спасибо!
from dark to light)
Алексей_2012 вне форума Ответить с цитированием
Старый 05.11.2014, 21:25   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Код:
// поиск второго по величине элемента
    int max=arr[0], buf=max;
    for (int i=0;i<n;i++)       if(a[i]>max){buf=max;max=a[i];}
    max=buf; // max - будет содержать второй по величине элемент.
Не?
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 07.11.2014, 20:24   #3
Алексей_2012
t45t
Участник клуба
 
Аватар для Алексей_2012
 
Регистрация: 20.03.2012
Сообщений: 1,849
По умолчанию

Увы, не получилось, вывелось число 88, а должно быть 151

Код:
#include <QCoreApplication>
#include <qmath.h>
#include<qmath.h>
#include <ctime>
int main(int argc, char *argv[])
{
    QCoreApplication a(argc, argv);
    srand(time(NULL));
    const int n=5;
    float arr[n];
    for (int i=0; i<n;i++)
    {
        arr[i]=rand()%200;
        printf("%f;  ",arr[i]);
        if (i%4==3) printf("\n");//для наглядности
    } 
    printf("\n----------------------------------------------\n");

// поиск второго по величине элемента
    int max,buf;
            max=arr[0];

    buf=max;
       for (int i=0;i<n;i++)       if(arr[i]>max){buf=max;max=arr[i];}
       max=buf;


// подсчет вхождений
       
       
    int count=0;
    for (int i=0;i<n;i++) {
        count+=(arr[i]==max);
        printf("%f;  ",arr[i]);

        if (i%4==3) printf("\n"); //для наглядности
    }
    printf("\n----------------------------------------------\n");
    if (count>0)
       {

        printf("\n iskomoe chislo: %d",max);
        printf("\n Bsego Bxogenii: %d",count);}
    else
        printf("\nNET BXOGENII ");

    return a.exec();
}
Изображения
Тип файла: jpg Безымянный.jpg (20.6 Кб, 134 просмотров)
from dark to light)
Алексей_2012 вне форума Ответить с цитированием
Старый 07.11.2014, 20:41   #4
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Отладкой конечно же не проходил?
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 07.11.2014, 20:52   #5
Алексей_2012
t45t
Участник клуба
 
Аватар для Алексей_2012
 
Регистрация: 20.03.2012
Сообщений: 1,849
По умолчанию

нет, не проходил, я с QT неделю только работаю
from dark to light)
Алексей_2012 вне форума Ответить с цитированием
Старый 07.11.2014, 21:05   #6
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Эхехех... Знаешь почему у школоты такое обидное прозвище?
Не потому что это школьники или студенты. Нет. Потому что эти люди (кто бы они ни были, подростки или старики) не хотят думать самостоятельно. Пытаться не хотят. Что-то не получилось - котострофа! Все! Хана!. Крик "Спаситепамагите!" заполоняет все форумы. Не хочет школота немного включить моск и попытаться самостоятельно устранить ошибку. Думает что за них гики и ботаны разрулят ситуацию. А потом обижаются когда их журят мол "А чего сам не попытался? Ты такой да сякой".
Хочешь быть школолом? Не вопрос )
Получай код и готовься работать в Макдональдсе (ибо такие гадюки как я тоже иногда туда заходят).
Код:
       buf=max;
       for (i=0;i<n;i++){
        if(arr[i]>max){
            buf=max;
            max=arr[i];
        } else
        if(arr[i]>buf) buf=arr[i];
       }
       max=buf;
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 07.11.2014, 21:14   #7
Алексей_2012
t45t
Участник клуба
 
Аватар для Алексей_2012
 
Регистрация: 20.03.2012
Сообщений: 1,849
По умолчанию

Спасибо!

оффтоп: а почему вы решили что мне лишь бы код получить? Да, я разбираться сам пробовал, написал рабочую программу, но с сортировкой, что оказалось не у дел, почему я после окончания колледжа пошел в ВУЗ, а не работать?) В макдональсе я работать не хочу, поэтому стараюсь стать программистом, который напишет не развалины с применением копипасты дабы работало, а достойную программу, для этого люди и учатся)
from dark to light)
Алексей_2012 вне форума Ответить с цитированием
Старый 07.11.2014, 21:42   #8
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
а почему вы решили что мне лишь бы код получить?
По фразе:
Цитата:
я с QT неделю только работаю
Это вместо того чтоб открыть гугл, почитать о том как в Кутье отладка делается, пошагово пройтись по коду и посмотреть как же он работает.
И это не важно в чем ты работаешь. Тебя посадят на Xamarin или Code::Block ты что тоже в инет коды постить будешь вместо того чтоб разобраться как с ними работать?
Цитата:
для этого люди и учатся
Пока что тебе нужно научится одному - уметь учиться.
Забудь про программирование и научись добывать знания из разных источников.
Тебя будут пинать, гнуть мордахой в грязь, втаптывать в нижние штаны населения, цепляя ярлыки и если это тебя не научит выуживать их этих "падений и проигрышей" полезную информацию дальше можешь не продолжать.
Это примерно так же как и валят студентов-стипендиатов в ВУЗах как ненужный хлам в виде голодных ртов.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
второй по величине элемент вектора fbsd Помощь студентам 1 16.02.2012 16:35
Одномерный массив. Необходимо заменить последний положительный элемент на второй элемент массива кумитэ Паскаль, Turbo Pascal, PascalABC.NET 1 19.12.2011 16:44
Второй по величине элемент в массиве.Prologue. Nicko_mt Помощь студентам 0 07.10.2011 23:35
Найти второй по величине элемент массива (за два прохода; за один проход) (на Паскале) Мaрина Помощь студентам 2 26.09.2011 13:49
Найти второй по величине элемент (assembler) Rom@shka Помощь студентам 3 22.06.2009 20:07