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

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

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

Восстановить пароль

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

Ответ
 
Опции темы Поиск в этой теме
Старый 24.02.2014, 20:57   #1
Вероника99
Форумчанин
 
Регистрация: 15.12.2013
Сообщений: 414
По умолчанию Правильная ли программа? С++

Не уверена в правильности соответствия задания и кода. Обычно ведь очередь через структуру делается. Задание следующее:
Создать класс - очередь. Определить конструктор, деструктор, функции для ввода элемента в очередь и изъятия элемента из очереди, вычисление количества элементов в очереди, суммы и произведения элементов.
Код:
main.cpp
Код:
#include "stdafx.h"
#include "queue.h"
#include <iostream>
#include <conio.h>
using namespace std;
 
int main()
{
    int n;
    queue a; //object
    cout<<"Enter numbers:";
    for(int i=0;i<100;i++)
    { 
        cin>>n; 
        if(n==0)
            break;
        a.qput(n);  
    }
    a.print();
    return 0;
}
queue.h
Код:
#include "stdafx.h"
#ifndef QUEUE_H
#define QUEUE_H
 
class queue
{
public:
    queue();
    ~queue();
    void qput( int m );
    void qget();
    void print();
private:
    int a[100];
    int start,end;
};
#endif
queue.cpp
Код:
#include "stdafx.h"
#include "queue.h"
#include <iostream>
using namespace std;
 int k;
 int sum=0,dob=1;
 
queue::queue()
{
    start=0;
    end=0;
}
 
void queue::qget()
{
 
    if ( start == end )
    {
        cout<<"Queue is empty!";
        return;
    }
    cout<<"Element "<<a[end]<<"\n";
    end++;
    
}
void queue::qput( int m )
{
    if ( 100 == start )
    {
        cout<<"Queue is full!";
        return;
    }
    a[start] = m;
 
    start++;
    k=start;
    sum+=m;
    dob*=m;
}
 
void queue::print()
{
    for(int i=0;i<k;i++)
        cout<<" "<<a[i];
}
 queue::~queue()
{
    cout<<"\nGeneral count "<<k<<"\nSum="<<sum<<"\nProizved"<<dob<<endl;
}
Вероника99 вне форума Ответить с цитированием
Старый 25.02.2014, 09:17   #2
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,833
По умолчанию

Вы забыли указать: от нас то чего хотите? или просто хвастаетесь?
p51x вне форума Ответить с цитированием
Старый 25.02.2014, 14:49   #3
challengerr
Участник клуба
 
Аватар для challengerr
 
Регистрация: 30.07.2008
Сообщений: 1,609
По умолчанию

В данном классе количество элементов фиксированное, поэтому вычисление количества элементов не требуется.
Отсутствуют функции подсчета суммы и произведения элементов
Синтаксические ошибки не смотрел
"SPACE.THE FINAL FRONTIER.This's a voyage of starship Enterprise. It's 5-year mission to explore strange new worlds,to seek out new life and civilizations,to boldly go where no man has gone before"
challengerr вне форума Ответить с цитированием
Старый 25.02.2014, 19:40   #4
Smogg
Участник клуба
 
Регистрация: 14.06.2011
Сообщений: 1,138
По умолчанию

Цитата:
Сообщение от challengerr Посмотреть сообщение
В данном классе количество элементов фиксированное, поэтому вычисление количества элементов не требуется.
Отчего же? Разве count = start - end; не похоже на вычисление?

А по делу:
а) если end == 80 и start == 100, то очередь не очень то фулл.
б) Вычислять суммы надо, как указали, отдельными функциями. К тому же сейчас у вас, при вынимании элемента, переменные произведений и суммы не уменьшаются (изменяются).
Smogg вне форума Ответить с цитированием
Старый 26.02.2014, 16:44   #5
Вероника99
Форумчанин
 
Регистрация: 15.12.2013
Сообщений: 414
По умолчанию

Я не хвастаюсь)Просто я нашла в интернете образец очереди и немного переделала его под задание,дело в том,что никак не могу разобраться с очередями,поэтому спросила правильно ли здесь написано,т.к раньше в основном сталкивалась с очередями через структуры.Спасибо за ответы,я сделаю отдельные функции для вычисления произведения и суммы)
Вероника99 вне форума Ответить с цитированием
Старый 26.02.2014, 20:36   #6
Вероника99
Форумчанин
 
Регистрация: 15.12.2013
Сообщений: 414
По умолчанию

Мне кажется,что здесь вышло обычное заполнение массива числами,а не очередь
Вероника99 вне форума Ответить с цитированием
Старый 26.02.2014, 20:43   #7
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,431
По умолчанию

Сам код мне не нравится (это не реализация очереди на кольцевом массиве, а какая-то заготовка). Почему Вы считаете, что это не очередь? Объект ведет себя как очередь, а уж как он там внутри реализован, не должно никого волновать. Другое дело, удовлетворяет ли такая реализация очереди условию. Вам нужно реализовать очередь "бесконечного" размера или фиксированного?
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )
BDA вне форума Ответить с цитированием
Старый 26.02.2014, 21:28   #8
Вероника99
Форумчанин
 
Регистрация: 15.12.2013
Сообщений: 414
По умолчанию

BDA, фиксированного размера. Меня сбило с толку,то что здесь нет структуры. Я доделала в соответствии с условием. Вот что получилось:
Код:
#include "stdafx.h"
#include "queue.h"
#include <iostream>
using namespace std;
 int k;
 int sum=0,dob=1;

queue::queue()
{
    start=0;
    end=0;
}
 
void queue::qget()
{

    if ( start == end )
    {
        cout<<"Queue is empty!";
        return;
    }
   // cout<<"Element "<<a[end]<<"\n";
    end++;
	if(start==100)
		start=0;
	
}
 
void queue::qput( int m )
{
    if ( 100 == start )
    {
        cout<<"Queue is full!";
        return;
    }

    a[start] = m;

    start++;
	k=start;
	
}

void queue::suma()
{
	for(int i=0;i<k;i++)
	{
		sum+=a[i];
		dob*=a[i];
	}
}

void queue::size()
{
	for(int i=start;i<end;i++)
		k++;

}
void queue::print()
{
	for(int i=0;i<k;i++)
		cout<<" "<<a[i];
	
}
 queue::~queue()
{
	cout<<"\nGeneral count "<<k<<"\nSum="<<sum<<"\nProizvedenie "<<dob<<endl;
}
Вероника99 вне форума Ответить с цитированием
Старый 01.03.2014, 21:55   #9
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,431
По умолчанию

Код:
#include <iostream>
using namespace std;

enum { SIZE = 10 };

class queue
{
public:
    queue() : start(0), end(0), sum(0), pr(1) {}
    ~queue() {}
    int qput(int m);
    int qget();
    void print(ostream &f);
    int qsum();
    int qpr();
    int qcount();
private:
    int a[SIZE];
    int start, end;
    int sum;
    int pr;
};
 
int queue::qget()
{
    if (start == end)
        return 0;
    int tmp = start;
    start = (start + 1) % SIZE;
    sum -= a[tmp];
    pr /= a[tmp];
    return a[tmp];
}
 
int queue::qput(int m)
{
    if ((end + 1) % SIZE == start)
        return 1;
    a[end] = m;
    sum += m;
    pr *= m;
    end = (end + 1) % SIZE;
    return 0;
}

void queue::print(ostream &f)
{
    for (int i = start; i < end; i = (i + 1) % SIZE)
        f << a[i] << " ";
    f << endl;
}

int queue::qsum()
{
    return sum;
}

int queue::qpr()
{
    if (qcount())
        return pr;
    else
        return 0;
}

int queue::qcount()
{
    return (end + SIZE - start) % SIZE;
}

int
main()
{
    int n;
    queue a;
    cout << "Enter numbers:";
    for(int i = 0; i < 15; ++i) {
        cin >> n; 
        if(n == 0)
            break;
        if (a.qput(n))
            cout << "queue full" << endl;        
    }
    a.print(cout);
    cout << "Sum: " << a.qsum() << " Product: " << a.qpr() << " Count: " << a.qcount() << endl;
    for(int i = 0; i < 15; ++i) {
        n = a.qget();
        if (!n)
            cout << "queue empty" << endl;
        else
            cout << "Element: " <<  n << " Sum: " << a.qsum() << " Product: " << a.qpr() << " Count: " << a.qcount() << endl;
    }
}
В очереди ни в коем случае не должно оказаться нулей, иначе очередь "сломается".
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )

Последний раз редактировалось BDA; 01.03.2014 в 22:07.
BDA вне форума Ответить с цитированием
Старый 01.03.2014, 23:48   #10
Вероника99
Форумчанин
 
Регистрация: 15.12.2013
Сообщений: 414
По умолчанию

Цитата:
Сообщение от BDA Посмотреть сообщение
В очереди ни в коем случае не должно оказаться нулей, иначе очередь "сломается".
Смысле нулей не должно оказаться?При удалении элементов нельзя менять на 0 или что Вы имеете в виду?

Последний раз редактировалось Вероника99; 02.03.2014 в 00:24.
Вероника99 вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Правильная архитектура ПО dest_ru Общие вопросы по программированию, компьютерный форум 0 13.07.2012 15:06
Правильная кодировка scalpel PHP 4 21.09.2011 16:33
Правильная вёрстка STIGMATED HTML и CSS 0 17.09.2010 21:45
правильная ли прога? rouvers Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 4 17.05.2010 08:40
Правильная программа? Надюха Помощь студентам 10 28.09.2007 14:40