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

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

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 29.05.2015, 11:35   #1
Алексей_2012
t45t
Участник клуба
 
Аватар для Алексей_2012
 
Регистрация: 20.03.2012
Сообщений: 1,849
По умолчанию С,С++, Последовательность четных чисел, цепочка неповторяющихся элементов

Ребят, здравствуйте, задана последовательности чисел, генерируемая рандомом в диапазоне от -126 до 126, нужно составить три списка:

В первом списке -все данные.
во втором-цепочка четных возрастающих чисел
в третьем-нечетных убывающих

Например:

получили такие значения: (список 1)
-18 -12 17 -14 16 -11 -25 -17 19 -1 12 15 24 22 24 -21 19 -16 -2 2 -4 6 19 -23 -19

во втором списке быть должно:
-18 -12 16 22 24

в третьем:
17 -11 -25


Целесообразно использовать массивы, а потом его сортировать, но тут другое правило, я думаю. Как то нужно сравнить то последнее число, которое есть в одном из двух списков, сравнить его с числом, которое сгенерировалось на i этапе, если оно больше другого, то занести в список, если меньше-не заносить и перейти на новую итерацию

проблема в возрастании/убывании.


я третий день сижу, завтра уже сдавать.
что нужно добавить в этот кусок кода (в условие)?

Код:

        if (chislo%2==0)

        {
            newspisokone=new spisok;
            newspisokone->numeric=chislo;
            newspisokone->next=head1;
            head1=  newspisokone;

        }
        else
        {

            newspisoktwo=new spisok;
            newspisoktwo->numeric=chislo;
            newspisoktwo->next=head2;
            head2=  newspisoktwo;
        }


Код:
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <math.h>
#include <ctime>


MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);
    ui->lineEdit->setValidator(new QRegExpValidator(QRegExp("[\\d]+"), this));

}

MainWindow::~MainWindow()
{
    delete ui;
}



struct spisok
{
    int numeric;
    spisok *next;
};


spisok *head=NULL;
spisok *head2=NULL;
spisok *head1=NULL;


void MainWindow::on_pushButton_clicked()
{

    int j=ui->lineEdit->text().toInt(),chislo=0,count=0,back=0;
    spisok *inputnewspisok,*newspisokone,*newspisoktwo;

    srand(time(NULL));


    for (int i=0;i<j;i++)
    {   chislo=rand()%1000-500;


        //пока число вне диапозона-генерируем новое
        while (chislo>126||chislo<-126)
        {
            chislo=rand()%1000-500;
            count++;//сколько раз число вне диапозона
        }


        //заполняем исходный список
        inputnewspisok=new spisok;
        inputnewspisok->numeric=chislo;
        inputnewspisok->next=head;
        head=  inputnewspisok;




        if (chislo%2==0)

        {
            newspisokone=new spisok;
            newspisokone->numeric=chislo;
            newspisokone->next=head1;
            head1=  newspisokone;

        }
        else
        {

            newspisoktwo=new spisok;
            newspisoktwo->numeric=chislo;
            newspisoktwo->next=head2;
            head2=  newspisoktwo;
        }


    }





    //вывод

    ui->textEdit->append(QString("Исходный список:"));

    while(inputnewspisok)
    {
        ui->textEdit->append(QString("%1;").arg(inputnewspisok->numeric));
        inputnewspisok=inputnewspisok->next;

    }

    ui->textEdit->append(QString("\nЧисло вне диапозона появлялось: %1\n\nРезультат списка 1:").arg(count));


    while(newspisokone)
    {
        ui->textEdit->append(QString("%1").arg(newspisokone->numeric));
        newspisokone=newspisokone->next;

    }

    ui->textEdit->append(QString("\n\nРезультат списка 2:").arg(count));


    while(newspisoktwo)
    {
        ui->textEdit->append(QString("%1").arg(newspisoktwo->numeric));
        newspisoktwo=newspisoktwo->next;

    }


}
from dark to light)
Алексей_2012 вне форума Ответить с цитированием
Старый 29.05.2015, 11:54   #2
Алексей_2012
t45t
Участник клуба
 
Аватар для Алексей_2012
 
Регистрация: 20.03.2012
Сообщений: 1,849
По умолчанию

Вот переделал что-то, получилось так:


Исходный список:
110;
83;
59;
-84;
-106;
-3;
-79;
22;
-55;
98;

Число вне диапозона появлялось: 46

Результат списка 1:
-84
-106


Результат списка 2:
83
59


Все равно не то, что нужно



вот код:

Код:
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <math.h>
#include <ctime>


MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);
    ui->lineEdit->setValidator(new QRegExpValidator(QRegExp("[\\d]+"), this));
    
}

MainWindow::~MainWindow()
{
    delete ui;
}



struct spisok
{
    int numeric;
    spisok *next;
};


spisok *head=NULL;
spisok *head2=NULL;
spisok *head1=NULL;


void MainWindow::on_pushButton_clicked()
{
    
    int j=ui->lineEdit->text().toInt(),chislo=0,count=0,back_c=0,back_notchet=0;
    spisok *inputnewspisok,*newspisokone,*newspisoktwo;
    
    srand(time(NULL));
    
    
    for (int i=0;i<j;i++)
    {   chislo=rand()%1000-500;
        
        
        //пока число вне диапозона-генерируем новое
        while (chislo>126||chislo<-126)
        {
            chislo=rand()%1000-500;
            count++;//сколько раз число вне диапозона
        }
        
        
        if (i==0)
        {
            back_c=chislo;
            back_notchet=chislo;
            
        }
        
        //заполняем исходный список
        inputnewspisok=new spisok;
        inputnewspisok->numeric=chislo;
        
        
        
        
        
        
        if (chislo%2==0)
        {
            if (back_c>inputnewspisok->numeric)
            {
                back_c=newspisokone->numeric;               
                newspisokone=new spisok;
                newspisokone->numeric=chislo;
                newspisokone->next=head1;
                head1=  newspisokone;
            }
        }
        else
        {   if (back_notchet<inputnewspisok->numeric)
            {
                back_notchet=newspisokone->numeric;       
                newspisoktwo=new spisok;
                newspisoktwo->numeric=chislo;
                newspisoktwo->next=head2;
                head2=  newspisoktwo;
            }
        }
        
        
        
        inputnewspisok->next=head;
        head=  inputnewspisok;
        
    }
    
    
    
    
    
    //вывод
    
    ui->textEdit->append(QString("Исходный список:"));
    
    while(inputnewspisok)
    {
        ui->textEdit->append(QString("%1;").arg(inputnewspisok->numeric));
        inputnewspisok=inputnewspisok->next;
        
    }
    
    ui->textEdit->append(QString("\nЧисло вне диапозона появлялось: %1\n\nРезультат списка 1:").arg(count));
    
    
    while(newspisokone)
    {
        ui->textEdit->append(QString("%1").arg(newspisokone->numeric));
        newspisokone=newspisokone->next;
        
    }
    
    ui->textEdit->append(QString("\n\nРезультат списка 2:").arg(count));
    
    
    while(newspisoktwo)
    {
        ui->textEdit->append(QString("%1").arg(newspisoktwo->numeric));
        newspisoktwo=newspisoktwo->next;
        
    }
    
    
}
from dark to light)

Последний раз редактировалось Алексей_2012; 29.05.2015 в 11:59.
Алексей_2012 вне форума Ответить с цитированием
Старый 29.05.2015, 12:08   #3
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,289
По умолчанию

1) Зачем генерировать числа не из требуемого диапазона?
Код:
chislo = rand() % 253 - 126;
2) Не проверял:
Код:
if (chislo % 2 == 0)
{
    if (head1 == NULL || chislo > head1->numeric)
    {             
        newspisokone = new spisok;
        newspisokone->numeric = chislo;
        newspisokone->next = head1;
        head1 =  newspisokone;
    }
}
else
{
    if (head2 == NULL || chislo < head2->numeric)
    {     
        newspisoktwo = new spisok;
        newspisoktwo->numeric = chislo;
        newspisoktwo->next = head2;
        head2 = newspisoktwo;
    }
}
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )
BDA вне форума Ответить с цитированием
Старый 29.05.2015, 12:14   #4
Алексей_2012
t45t
Участник клуба
 
Аватар для Алексей_2012
 
Регистрация: 20.03.2012
Сообщений: 1,849
По умолчанию

перый элемент исходного списка в любом случае должен заносится в один из результативных списков, однако этого не происходит
from dark to light)
Алексей_2012 вне форума Ответить с цитированием
Старый 29.05.2015, 12:38   #5
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,289
По умолчанию

Цитата:
Сообщение от Алексей_2012 Посмотреть сообщение
однако этого не происходит
Странно, так как именно для этого в условиях стоит "head1 == NULL ||".
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )
BDA вне форума Ответить с цитированием
Старый 29.05.2015, 13:42   #6
Алексей_2012
t45t
Участник клуба
 
Аватар для Алексей_2012
 
Регистрация: 20.03.2012
Сообщений: 1,849
По умолчанию

Возможно условие, наверное, нужно добавить, если I==0, то пишем в результаьивный список это число вне зависимости от условия где ИЛИ?

Я прав?

Потому что сравнивать несчем будет при i==0
from dark to light)
Алексей_2012 вне форума Ответить с цитированием
Старый 29.05.2015, 14:09   #7
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,289
По умолчанию

Опираться нужно не на i, т.к. оба списка должны иметь какой-то начальный элемент, чей индекс не обязательно ноль.
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )
BDA вне форума Ответить с цитированием
Старый 29.05.2015, 21:57   #8
Алексей_2012
t45t
Участник клуба
 
Аватар для Алексей_2012
 
Регистрация: 20.03.2012
Сообщений: 1,849
По умолчанию

А как задать изначальное значение? у меня бред получился и все равно не работает
Код:
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <math.h>
#include <ctime>


MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);
    ui->lineEdit->setValidator(new QRegExpValidator(QRegExp("[\\d]+"), this));

}

MainWindow::~MainWindow()
{
    delete ui;
}



struct spisok
{
    int numeric;
    spisok *next;
};


spisok *head=NULL;
spisok *head2=NULL;
spisok *head1=NULL;


void MainWindow::on_pushButton_clicked()
{

    ui->textEdit->clear();

    int j=ui->lineEdit->text().toInt(),chislo=0,count=0,back_c=0,back_notchet=0;
    spisok *inputnewspisok,*newspisokone,*newspisoktwo;

    srand(time(NULL));


    ui->textEdit->append(QString("Исходный список:"));

    for (int i=0;i<j;i++)
    {   chislo=rand()%1000-500;//chislo = rand() % 253 - 126;


        //пока число вне диапозона-генерируем новое
        while (chislo>126||chislo<-126)
        {
            chislo=rand()%1000-500;
            count++;//сколько раз число вне диапозона
        }


        if (i==0)
        {
            back_c=chislo;
            back_notchet=chislo;

        }

        //заполняем исходный список
        inputnewspisok=new spisok;
        inputnewspisok->numeric=chislo;
        ui->textEdit->append(QString("%1;").arg(inputnewspisok->numeric));
        inputnewspisok->next=head;
        head=  inputnewspisok;



        if (chislo % 2 == 0)
        {

            if (i==0)
            {
                newspisokone = new spisok;
                newspisokone->numeric = chislo;
                newspisokone->next = head1;
                head1 =  newspisokone;
            }
            else
            if (head1 == NULL || chislo > head1->numeric)
            {

                newspisokone = new spisok;
                newspisokone->numeric = chislo;
                newspisokone->next = head1;
                head1 =  newspisokone;
            }
        }
        else
        {
            if (i==0)
            {
                newspisoktwo = new spisok;
               newspisoktwo->numeric = chislo;
               newspisoktwo->next = head2;
               head2 = newspisoktwo;
            }
            else

            if (head2 == NULL || chislo < head2->numeric)
            {
                newspisoktwo = new spisok;
                newspisoktwo->numeric = chislo;
                newspisoktwo->next = head2;
                head2 = newspisoktwo;
            }
        }




    }





    //вывод





    ui->textEdit->append(QString("\nЧисло вне диапозона появлялось: %1\n\nРезультат списка 1:").arg(count));


    while(newspisokone)
    {
        ui->textEdit->append(QString("%1").arg(newspisokone->numeric));
        newspisokone=newspisokone->next;

    }

    ui->textEdit->append(QString("\n\nРезультат списка 2:").arg(count));


    while(newspisoktwo)
    {
        ui->textEdit->append(QString("%1").arg(newspisoktwo->numeric));
        newspisoktwo=newspisoktwo->next;

    }


}
from dark to light)
Алексей_2012 вне форума Ответить с цитированием
Старый 29.05.2015, 22:58   #9
Алексей_2012
t45t
Участник клуба
 
Аватар для Алексей_2012
 
Регистрация: 20.03.2012
Сообщений: 1,849
По умолчанию

Задание примерно так звучало, но вот что меня не устроило, в итоговом списке 1 сначала 22, а потом 24 идет, хотя в последовательности все иначе

Задание по спискам/очередям:
С помощью ГСЧ создать список целых чисел в диапазоне [-126; 126].
На основании этого списка построить два других. В первый включить возрастающие цепочки четных чисел,
Во второй - убывающие цепочки нечетных чисел.

Например:
Исходный список:
-18 -12 17 -14 16 -11 -25 -17 19 -1 12 15 24 22 24 -21 19 -16 -2 2 -4 6 19 -23 -19
Конечный список 1
-18 -12 16 22 24

Конечный список 2
17 -11 -25
from dark to light)
Алексей_2012 вне форума Ответить с цитированием
Старый 29.05.2015, 23:38   #10
Алексей_2012
t45t
Участник клуба
 
Аватар для Алексей_2012
 
Регистрация: 20.03.2012
Сообщений: 1,849
По умолчанию

где еще может быть собака зарыта быть? Множество вариантов перепробывал, все равно не работает

Код:
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <math.h>
#include <ctime>


MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);
    ui->lineEdit->setValidator(new QRegExpValidator(QRegExp("[\\d]+"), this));

}

MainWindow::~MainWindow()
{
    delete ui;
}



struct spisok
{
    int numeric;
    spisok *next;
};




void MainWindow::on_pushButton_clicked()
{

    spisok *head=NULL;
    spisok *head2=NULL;
    spisok *head1=NULL;

    ui->textEdit->clear();

    int j=ui->lineEdit->text().toInt(),chislo=0,count=0;
    if (j==0) j=10;
    spisok *inputnewspisok,*newspisokone,*newspisoktwo;

    srand(time(NULL));





    ui->textEdit->append(QString("Исходный список:"));

    for (int i=0;i<j;i++)
    {   chislo=rand()%1000-500;//chislo = rand() % 253 - 126;


        //пока число вне диапозона-генерируем новое
        while (chislo>126||chislo<-126)
        {
            chislo=rand()%1000-500;
            count++;//сколько раз число вне диапозона
        }




        //заполняем исходный список
        inputnewspisok=new spisok;
        inputnewspisok->numeric=chislo;
        ui->textEdit->append(QString("%1;").arg(inputnewspisok->numeric));
        inputnewspisok->next=head;
        head=  inputnewspisok;



        if (inputnewspisok->numeric % 2 == 0)
        {

            if (head1 == NULL || inputnewspisok->numeric> head1->numeric)
            {

                newspisokone = new spisok;
                newspisokone->numeric =inputnewspisok->numeric;


                if(!(head1))
                    newspisokone->next=NULL;
                else
                    newspisokone->next=head1;
                head1=newspisokone;


            }
        }
        else
        {


            if (head2 == NULL || inputnewspisok->numeric < head2->numeric)
            {
                newspisoktwo = new spisok;
                newspisoktwo->numeric = inputnewspisok->numeric;
                if(!(head2))
                    newspisoktwo->next=NULL;
                else
                    newspisoktwo->next=head2;
                head2=newspisoktwo;
            }
        }





    }






    //вывод





    ui->textEdit->append(QString("\nЧисло вне диапозона появлялось: %1\n\nРезультат списка 1:").arg(count));


    while(newspisokone)
    {
        ui->textEdit->append(QString("%1").arg(newspisokone->numeric));
        newspisokone=newspisokone->next;

    }

    ui->textEdit->append(QString("\n\nРезультат списка 2:").arg(count));



    while(newspisoktwo)
    {
        ui->textEdit->append(QString("%1").arg(newspisoktwo->numeric));
        newspisoktwo=newspisoktwo->next;

    }

    delete newspisokone;
    delete newspisoktwo;
    delete inputnewspisok;

}
from dark to light)
Алексей_2012 вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Дан целочисленный массив X(N,M).среди элементов нечетных столбцов массива найти количество четных чисел. darwin1 Паскаль, Turbo Pascal, PascalABC.NET 1 15.03.2014 17:50
Подсчитать сумму отрицательных четных чисел, количество четных чисел кратных 3 и т.д. (pascal abc .net) kardinalmax Общие вопросы .NET 1 24.01.2014 09:28
Составить программу массива: Найти наименьшее из четных и произведение нечетных чисел, входящих в последовательность kolia_y Паскаль, Turbo Pascal, PascalABC.NET 8 06.10.2013 09:39
Дана последовательность целых чисел.Подсчитать среднее арифметическое отрицательных элементов. d_dima Помощь студентам 5 20.03.2013 15:14
Пусть вводится последовательность чисел, которая заканчивается нулем. Найдите среднее арифметическое четных чисел. d_dima Помощь студентам 3 13.03.2013 12:17