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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Помогите сделать курсовик 
:(
    Опции темы
Stanley
Дата 28.5.2005, 21:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Вот и сессия пришла а курсовик не могу сделать плиз помогите....
----------------------------------------------------------------------------------------------------------
Описать базовый класс СТРОКА.
Обязательные поля класса:
указатель на char — хранит адрес динамически выделенной памяти для размещения символов строки;
значение типа int — хранит длину строки в байтах.
Обязательные методы должны выполнять следующие действия:
конструктор без параметров;
конструктор, принимающий в качестве параметра Си-строку (заканчивается нулевым байтом);
конструктор, принимающий в качестве параметра символ;
конструктор копирования;
получение длины строки;
очистка строки (сделать строку пустой);
деструктор.
Описать производный от СТРОКА класс ДЕСЯТИЧНАЯ_СТРОКА.
Строки данного класса могут содержать только символы десятичных цифр и символы – и +, задающие знак числа. Символы – или + могут находиться только в первой позиции числа, причем символ + может отсутствовать, в этом случае число считается положительным. Если в составе инициализирующей строки будут встречены любые символы, отличные от допустимых, ДЕСЯТИЧНАЯ_СТРОКА принимает нулевое значение. Содержимое данных строк рассматривается как десятичное число.
Обязательные методы:
конструктор без параметров;
конструктор, принимающий в качестве параметра Си-строку (заканчивается нулевым байтом);
конструктор копирования;
деструктор;
метод, определяющий, можно ли представить данное число в формате int;
Переопределить следующие операции:
присваивание (=);
вычитание (–) — арифметическая разность строк;
операция > — проверка на больше (по значению);
операция < — проверка на меньше (по значению);
Разработчик вправе вводить любое (с обоснованием необходимости) число дополнительных полей и методов.
Написать тестовую программу, которая:
динамически выделяет массив указателей на базовый класс (4–6);
в режиме диалога заполняет этот массив указателями на производные классы, при этом экземпляры производных классов создаются динамически с заданием начальных значений;
для созданных экземпляров производных классов выполняет проверку всех разработанных методов с выводом исходных данных и результатов на дисплей.
Для конструкторов копирования каждого класса предусмотреть диагностическую печать количества его вызовов в определенное место дисплея (рекомендуется использовать статические члены класса).
Режим диалога обеспечивается с помощью иерархического меню.
PM MAIL   Вверх
Yanis
Дата 28.5.2005, 21:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 2937
Регистрация: 9.2.2004
Где: Москва

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



Цитата(Stanley @ 28.5.2005, 21:51)
Вот и сессия пришла а курсовик не могу сделать плиз помогите....

А ты пытался? Тут в принципе не очень сложно. Если у тебя есть лекции, то это вполне реально написать самому.


--------------------
user posted image *щёлк*
PM MAIL WWW ICQ   Вверх
Stanley
Дата 28.5.2005, 22:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



В том то и проблема что лекции частично не посещались или наоборот частично посещались и поетому лекций нет... Я не много не догоняю до классов что это такое я представляю а с чем едят не очень...
PM MAIL   Вверх
kometa_triatlon
Дата 28.5.2005, 22:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Какие-то у вас понтовые курсачи... У нас и лабы посерьезнее будут.
Ща попробую забацать, правда сделаю не все, надо еще перегрузку операторов вспоминать...
Цитата

Для конструкторов копирования каждого класса предусмотреть диагностическую печать количества его вызовов в определенное место дисплея (рекомендуется использовать статические члены класса).

Интересно, как это сделать?

ЗЫ. А вообще это надо в центр помощи, вот если бы ты что-то сам сделал, тогда другое дело.


--------------------
Всё очень просто: сказки обман,
Солнечный остров скрылся в туман,
Замков воздушных не носит земля,
Кто-то ошибся, ты или я.

--------------
Программирование - самое большое удовольствие, которое вы можете получить, будучи одетым.
PM MAIL ICQ   Вверх
Yanis
Дата 28.5.2005, 22:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 2937
Регистрация: 9.2.2004
Где: Москва

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



Цитата(kometa_triatlon @ 28.5.2005, 22:49)
нтересно, как это сделать?

ответ:
Цитата(kometa_triatlon @ 28.5.2005, 22:49)
рекомендуется использовать статические члены класса




--------------------
user posted image *щёлк*
PM MAIL WWW ICQ   Вверх
Stanley
Дата 28.5.2005, 22:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



у меня есть похожий курсач... сейчас архив с почты скачаю...
PM MAIL   Вверх
kometa_triatlon
Дата 29.5.2005, 19:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Цитата
Строки данного класса могут содержать только символы десятичных цифр и символы – и +, задающие знак числа

Получается, что строка может содержать только целые числа, так как запятая или точка не входит в разрешенные символы.
Тогда зачем:
Цитата
метод, определяющий, можно ли представить данное число в формате int;


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


--------------------
Всё очень просто: сказки обман,
Солнечный остров скрылся в туман,
Замков воздушных не носит земля,
Кто-то ошибся, ты или я.

--------------
Программирование - самое большое удовольствие, которое вы можете получить, будучи одетым.
PM MAIL ICQ   Вверх
chipset
Дата 29.5.2005, 19:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 4071
Регистрация: 11.1.2003
Где: Seattle, US

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



Модератор: из C++:Общие вопросы



--------------------
Цитата(Jimi Hendrix)
Well, I stand up next to a mountain
And I chop it down with the edge of my hand
PM MAIL WWW   Вверх
kometa_triatlon
Дата 29.5.2005, 20:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Ну вот и перенесли темуsmile


Вобщем, я тут наваял частично.
Что НЕ сделал:
- не перегрузил операцию "-" (просто не допер как smile )
- не сделал метод, определяющий, можно ди представить число как int
(Потому что строка в любом случае содержит целые числа)

-
Цитата
Для конструкторов копирования каждого класса предусмотреть диагностическую печать количества его вызовов в определенное место дисплея

???

Тестовую програму попробуй написать сам, если нужны комментарии, скажешь
MyString.h
Код

#pragma once
#include <iostream>
using namespace std;
class CMyString
{
public:
    char* m_strString;
    int m_iStrLength;

public:
    CMyString(void);
    CMyString(char* newStr);
    CMyString(char newStr);
    CMyString(const CMyString& );
    ~CMyString(void);
    int GetLength();
    bool Clear();

private:
    friend ostream &operator << (ostream &, const CMyString &);
    friend istream &operator >> (istream &, CMyString &);

};



MyString.cpp
Код

#include "StdAfx.h"
#include ".\mystring.h"
#include <assert.h>
#include <string.h>
#include <iostream>
using namespace std;

CMyString::CMyString(void)
{
    m_strString = new char[256];
    m_iStrLength = 0;
}

CMyString::CMyString(char* newStr)
{
    m_strString = new char[256];
    strcpy(m_strString, newStr);
    m_iStrLength = strlen(newStr);
}

CMyString::CMyString(char newStr)
{
    m_strString = new char[256];
    strcpy(m_strString, &newStr);
    m_iStrLength = 1;
}
CMyString::CMyString( const CMyString &copy){
    m_iStrLength = copy.m_iStrLength;
    m_strString = new char[m_iStrLength+1];
    assert(m_strString != 0);
    strcpy(m_strString, copy.m_strString);

}

CMyString::~CMyString(void)
{
    delete [] m_strString;
}

int CMyString::GetLength(){
    return m_iStrLength;
}

bool CMyString::Clear(){
    m_iStrLength = 0;
    strcpy(m_strString,"");
    if (strcmp(m_strString,"")==0 && m_iStrLength == 0) return true;
    return false;
}
ostream &operator << (ostream &output, const CMyString &str){
    output<<str.m_strString;
    return output;
}

istream &operator >> (istream &input, CMyString &str){
    char buffer[256];
    input.getline(buffer,256);
    strcpy(str.m_strString, buffer);
    str.m_iStrLength = strlen(buffer);
    return input;
}


DecString.h
Код

#pragma once
#include "mystring.h"

class CDecString :
    public CMyString
{
public:
    CDecString(void);
    CDecString(char* newStr);
    CDecString(const CDecString& );
    ~CDecString(void);
    

private:
    bool IsDec(char* str);
    int GetNumber(const char* str);

    friend ostream &operator << (ostream &, const CDecString &);
    friend istream &operator >> (istream &, CDecString &);

public:
    const CDecString &operator = (const CDecString&);
    bool operator < (const CDecString&);
    bool operator > (const CDecString&);
};



DecString.cpp
Код

#include "StdAfx.h"
#include ".\decstring.h"
#include <assert.h>

CDecString::CDecString(void)
{
    m_strString = new char[256];
    strcpy(m_strString,"");
    m_iStrLength=0;
}
CDecString::CDecString(char *newStr){
    
    m_strString = new char[256];
    
    if( IsDec(newStr) ){
        strcpy(    m_strString, newStr);
        m_iStrLength = strlen(newStr);
    }
    else {
        strcpy(    m_strString, "");
        m_iStrLength = 0;
    }
}
CDecString::CDecString(const CDecString &copy){
    
    m_strString = new char[m_iStrLength+1];
    
    if(IsDec(copy.m_strString)){
        m_iStrLength = copy.m_iStrLength;
        assert(m_strString != 0);
        strcpy(m_strString, copy.m_strString);
    }
    else{
        strcpy(    m_strString, "");
        m_iStrLength = 0;
    }
}
CDecString::~CDecString(void)
{
}

bool CDecString::IsDec(char *str){
    bool flag = true;
    for( int i=0; i<strlen(str); i++){
        if( str[i] != '0' &&
            str[i] != '1' &&
            str[i] != '2' &&
            str[i] != '3' &&
            str[i] != '4' &&
            str[i] != '5' &&
            str[i] != '6' &&
            str[i] != '7' &&
            str[i] != '8' &&
            str[i] != '9' &&
            ( str[i] != '+' && i != 0) && 
            ( str[i] != '-' && i != 0) 
            )
            
            {
                flag = false;
                break;
            }
    }
    return flag;
}

ostream &operator << (ostream &output, const CDecString &str){
    output<<str.m_strString;
    return output;
}

istream &operator >> (istream &input, CDecString &str){
    char buffer[256];
    input.getline(buffer,256);
    
   if(str.IsDec(buffer)){
        strcpy(str.m_strString, buffer);
        str.m_iStrLength = strlen(buffer);
    }
    else {
        strcpy(str.m_strString,"");
        str.m_iStrLength = 0;
    }
    return input;
}

int CDecString::GetNumber( const char* str){
    char buf[256];
    strcpy(buf, str);
    switch(buf[0]){
        case '+':
            for(int i=0; i<strlen(buf)-1; i++)
                buf[i]=buf[i+1];
            buf[i]='\0';
            return atoi(buf);
            break;

        case '-':
            for(int i=0; i<strlen(buf)-1; i++)
                buf[i]=buf[i+1];
            buf[i]='\0';
            return (0 - atoi(buf));
            break;
        default:
            return atoi(buf);
    }
}

const CDecString &CDecString::operator = (const CDecString &rightValue){
    
    if(&rightValue != this){
        delete [] m_strString;
        m_iStrLength = rightValue.m_iStrLength;
        m_strString = new char[m_iStrLength+1];
        strcpy(m_strString, rightValue.m_strString);
    }

    return *this;
}

bool CDecString::operator < (const CDecString &rightValue){
    return (  GetNumber(m_strString) < GetNumber(rightValue.m_strString));
}
bool CDecString::operator > (const CDecString &rightValue){
    return (  GetNumber(m_strString) > GetNumber(rightValue.m_strString));
}


Кстати, я еще перегрузил операторы << >>, чтобы было удобнее работать.

Текст тестовой программы
Код

// STR.cpp : Defines the entry point for the console application.
//

#include "stdafx.h"
#include "MyString.h"
#include "DecString.h"
#include <conio.h>
#include <iostream>
using namespace std;

int _tmain(int argc, _TCHAR* argv[])
{
    CDecString str1("123"), str2("+120");
     
    cout<<(str1<str2?"1":"2");
    getch();
    return 0;
}




Это сообщение отредактировал(а) kometa_triatlon - 30.5.2005, 00:27


--------------------
Всё очень просто: сказки обман,
Солнечный остров скрылся в туман,
Замков воздушных не носит земля,
Кто-то ошибся, ты или я.

--------------
Программирование - самое большое удовольствие, которое вы можете получить, будучи одетым.
PM MAIL ICQ   Вверх
kometa_triatlon
Дата 29.5.2005, 23:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Перегрузил минус...
Код

CDecString operator - ( CDecString &rightValue);


Код

CDecString CDecString::operator - (CDecString &rightValue){
    
    char buf[256];
    sprintf(buf,"%d", GetNumber(m_strString)-rightValue.GetNumber(rightValue.m_strString));
    return CDecString(buf);
}



--------------------
Всё очень просто: сказки обман,
Солнечный остров скрылся в туман,
Замков воздушных не носит земля,
Кто-то ошибся, ты или я.

--------------
Программирование - самое большое удовольствие, которое вы можете получить, будучи одетым.
PM MAIL ICQ   Вверх
Void
Дата 30.5.2005, 20:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


λcat.lolcat
****


Профиль
Группа: Участник Клуба
Сообщений: 2206
Регистрация: 16.11.2004
Где: Zürich

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



Цитата(kometa_triatlon @ 29.5.2005, 22:42)
Код
bool CDecString::IsDec(char *str){
    bool flag = true;
    for( int i=0; i<strlen(str); i++){
        if( str[i] != '0' &&
// поскипано
            str[i] != '9' &&
            ( str[i] != '+' && i != 0) && 
            ( str[i] != '-' && i != 0) 
            )
            
            {
                flag = false;
                break;
            }
    }
    return flag;
}

smile
Код

bool CDecString::IsDec(char *str) {
    if (*str == '+' || *str == '-') ++str;
    if (!isdigit(*str)) return false;
    while (*str && isdigit(*str)) ++str;
    return !*str;
}


Цитата(kometa_triatlon @ 29.5.2005, 22:42)
Код
int CDecString::GetNumber( const char* str){
...
    switch(buf[0]){
        case '+':
...
            return atoi(buf);
            break;
        case '-':
...
            return (0 - atoi(buf));
            break;
        default:
            return atoi(buf);
    }
}

atoi знаковые числа умеет...

По поводу операторов + и -: я подозреваю, что по условию надо работать со строкам, как с длинными целыми числами (массивом цифр), не ограничиваясь int.

Это сообщение отредактировал(а) Void - 30.5.2005, 20:12


--------------------
“Coming back to where you started is not the same as never leaving.” — Terry Pratchett
PM MAIL WWW GTalk   Вверх
kometa_triatlon
Дата 30.5.2005, 21:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Void
Маньяк smile
IsDec() мне понравилось smile


--------------------
Всё очень просто: сказки обман,
Солнечный остров скрылся в туман,
Замков воздушных не носит земля,
Кто-то ошибся, ты или я.

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

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


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

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

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

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


 




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


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

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