1

Тема: Алгоритм

Не можу до кінця доробити задачу прошу вашої допомоги. І так завдання має таку постановку:
З уведених цілих чисел сформувати список типу черга. Розробити функцію, яка вилучає з черги елементи, поки значення її початкового елемента не стане парним і виводить значення вилучених елементів. Якщо черга не містить елементів із парними значеннями, то вилучити всі її елементи. Функція передає в основну програму нові адреси початку та кінця черги.

#include "stdafx.h"
#include "conio.h"
#include "stdio.h"
#include "locale.h"
#define N 5
int _tmain(int argc, _TCHAR* argv[])

{
setlocale(LC_ALL, "ukr");
int n,i,j;
int head=0;
int mas [N];

    printf("Введiть кiлькiсть елементiв вiд 1 до 5\n");
    printf("Розмірність масиву - ");
    scanf("%d",&n);
        int tail=n-1;
    for(i=0; i<n; i++)
    {
        printf("Введiть [%d]  елементiв - ",i);
        scanf("%d", &mas[i]);  
    }
   
printf("-------------------------------------------------------------------\n");    
        printf("Додати елемент [n] - ");
        scanf("%d", &mas[++tail]);
printf("-------------------------------------------------------------------\n");
        printf("Відсортувати елементи:\n");
    for (i=head; i<=tail; i++)
    {
        printf("Введiть [%d]  елементiв - ",i);
        printf("%d\n",mas [i]);
    } 
printf("-------------------------------------------------------------------\n"); 
printf("Вилучення елемента з черги поки значення її початкового елемента \n");
printf("не стане парним і виводить значення вилучених елементів:\n");
 

  getch();    
     return 0;
}

Тобто, список у вигляді черги створений. Новий елемент добавляється. Як розробити функцію, яка вилучає з черги елементи, поки значення її початкового елемента не стане парним і виводить значення вилучених елементів. Я розумію, що черга ділитьться свогороду на голову (head) та хвіст (tail), необхідно задати що --head та мову перевірки на парність, задопомогою ділення без остачі. Ну не виходить цереалізувати, поможіть з алгоритмом....

2 Востаннє редагувалося Очі.завидющі (26.04.2013 23:36:39)

Re: Алгоритм

Винесіть за цикл або виправте на Введiть [%d]  елемент, а то нелогічно.

        printf("Введiть [%d]  елементiв - ",i);

необхідно задати що --head та мову перевірки на парність, задопомогою ділення без остачі.

Я щось не в'їжджаю у вашу говірку :)
Перевірку на парність легко створити логічною операцією X AND 1, де N - ваше число. Придивіться уважніше до двійкової системи числення, у ній перший біт визначає парність. Тобто 0 - парне, 1 - непарне, 10 - парне, 11 - непарне. Вам треба просто перевірити у циклі з хвоста до голови останній біт кожного елемента.

3

Re: Алгоритм

LeoDevel, а наступні шляхи заборонені?

1. Використання класу queue<int>;
2. Реалізація власного класу MyQueue.

Ну от вирішили ви зараз втілити чергу через *jge статичним масивом. Припустимо навіть, що ви хитро придумаєте, як створити видимість черги і виводити елементи вірним шляхом. А якщо потім вам дадуть схожу задачу (або додаткову), яку неможливо втілити на основі такого коду, ви будете заново велосипедити?..

Якщо мова дає можливості зробити танк - то й робіть танк, а не комбайн "Дон-1500" з приміткою "допрацювати терпугом". :)

4

Re: Алгоритм

@Bartash
Звідкіля ми знаємо, що саме LeoDevel вивчає? Може це чистий сі ? Я, наприклад, не знаю MFC, зате компенсую це знанням WinAPI/асемблера.

5

Re: Алгоритм

Очі.завидющі написав:

@Bartash
Звідкіля ми знаємо, що саме LeoDevel вивчає? Може це чистий сі ? Я, наприклад, не знаю MFC, зате компенсую це знанням WinAPI/асемблера.

Якщо чиста С то "struct MyQueue", інакше - "class MyQueue" або std::queue<int>.

З.І:

Я теж MFC ніколи не колупав: є багато зручніших речей. :)

6

Re: Алгоритм

На чистому сі. Допоможіть, що потрібно дописати до алгоритму , щоб вилучити з черги елементи, поки значення її початкового елемента не стане парним і виводить значення вилучених елементів. Будь-ласка..

7

Re: Алгоритм

LeoDevel написав:

На чистому сі. Допоможіть, що потрібно дописати до алгоритму , щоб вилучити з черги елементи

Я повторюю: на самокатах поле не варто пахати. Змініть структуру програми.

На кшалт такого: реалізацію - самотужки
#include <malloc.h>

struct MyQueue
{
    int number;
    MyQueue *next;
    
    MyQueue()
    {
        number = 0;
        next = 0;
    }
    
    ~MyQueue()
    {
        free(next);
    }
};

void fillQueue(struct MyQueue *q)
{
    //input items into queue
}

void freeQueue(struct MyQueue *q)
{
    //remove items until it contains an even number and print them
}

int main(void)
{
    struct MyQueue *root = (MyQueue*)malloc(sizeof(MyQueue));
    root->number = 1;
    
    fillQueue(root);
    freeQueue(root);
    
    free(root); // free memory, finally
    
    return 0;
}