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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> private member declared in class std::basic_ios<_E, при передаче файловой переменной в ф-ю 
V
    Опции темы
KasMP
Дата 25.12.2008, 21:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Завсегдатай
Сообщений: 586
Регистрация: 8.8.2006

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



а самая первая строчка о чем?
и можно все-таки это как-то попроще написать?
PM MAIL   Вверх
mes
Дата 25.12.2008, 21:12 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


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

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



Цитата(KasMP @  25.12.2008,  20:58 Найти цитируемый пост)
Я давно себя так плохо не чувствовала. Столько ошибок и непониманий smile ... 

Зато с каждым понимаем будет все больше свободы действий и спокойствия за код.

Добавлено @ 21:20
можно записать так 
Код

void Write (std::ostream& o, const lv_value& lv)
{
    if (lv.begin) o << lv.begin;
    else o<<"0";
}

тогда вывод в файл будет 
Write (fout, lv);
 можно так 
Код

ostream& Write (std::ostream& o, const lv_value& lv)
{
    if (lv.begin) o << lv.begin;
    else o<<"0";
   return o;
}

тогда при выводе можно использовать последовательность 
Write (fout, lv)<<"\n";


Код

void Write (std::ostream& o, const lv_value& lv)
{
    if (lv.begin) o << lv.begin;
    else o<<"0";
}
ostream& operator << (std::ostream& o, const lv_value& lv)
{
   Write (o, lv);
   return o;
}

тогда  можно : fout <<lv <<"\n";

в общем пользуй пока первый, а как будет время разбирайся с остальными )


Это сообщение отредактировал(а) mes - 25.12.2008, 21:21


--------------------
PM MAIL WWW   Вверх
KasMP
Дата 25.12.2008, 21:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Завсегдатай
Сообщений: 586
Регистрация: 8.8.2006

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



Код

void Write (std::ostream& o, const lv_value& lv)
{
    if (lv.begin) o << lv.begin;
    else o<<"0";
}

smile Вот это уже намного ближе smile .
Код

std::ostream& o

Мы передаем по ссылке переменную o типа выходной поток (или как правильно называется), который как-то связан с чем-то, называемым std...
(видимо, std - какой-то буфер или что-то типа этого... видимо, стандартный, а не определенный мной)

Добавлено через 2 минуты и 20 секунд
Цитата(mes @  25.12.2008,  21:06 Найти цитируемый пост)
а константа, эта сущность , у который есть и тип и адрес и все другие нужные характеристики, для того чтоб ...

действительно smile ! теперь понятно smile !

PM MAIL   Вверх
mes
Дата 25.12.2008, 21:40 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


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

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



Цитата(KasMP @  25.12.2008,  21:32 Найти цитируемый пост)
    
std::

намеспейс std принадлежит стандартной библиотеке шаблонов(stl). 
так скажем специальная именнованная область, чтоб имена функций и переменной одной библиотеки не пересекались с другими..
то есть если я пишу std::cout... то означает что использую функцию cout из области (namespace) std

чтоб не писать каждый раз std:: ,   можно один раз написать после инклудов using namespace std;
на старых компиляторах std не было,  в таких случаях можно просто отбрасывать этот префикс. 





--------------------
PM MAIL WWW   Вверх
KasMP
Дата 25.12.2008, 21:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Завсегдатай
Сообщений: 586
Регистрация: 8.8.2006

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



Код

// выводит структуру-результат (в файл, в нашем случае):
// если структура пустая, то выводит '0'
void Write (ostream &o, const lv_value &lv)
{
    if (lv.begin)
        o << lv.begin;
    else
        o << "0";
}
Код

Write(fout,lv); fout << '\n';
Вот, теперь я счастлива  smile .
Правда, коряво смотрятся 2 вывода рядом в одно и то же место разными способами... Потом откорректирую.
PM MAIL   Вверх
mes
Дата 25.12.2008, 21:52 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


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

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



Цитата(KasMP @  25.12.2008,  21:46 Найти цитируемый пост)
Правда, коряво смотрятся 2 вывода рядом в одно и то же место разными способами... Потом откорректирую. 

используй второй вариант.
или 
Код

void Write (ostream &o, const char * sep,  const lv_value &lv)
{
    if (lv.begin)
        o << lv.begin;
    else
        o << "0";

   o<<sep;  // вывод разделителя. 
}


Это сообщение отредактировал(а) mes - 25.12.2008, 21:53


--------------------
PM MAIL WWW   Вверх
KasMP
Дата 25.12.2008, 21:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Завсегдатай
Сообщений: 586
Регистрация: 8.8.2006

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



Код
// максимальная количество цифр в числах
int MAX=100;

// адреса файлов для ввода-вывода
char path1[]="C:\\in1.txt";
char path2[]="C:\\in2.txt";
char pathout[]="C:\\out.txt";

PM MAIL   Вверх
mes
Дата 25.12.2008, 22:04 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


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

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



a const не забыла??



--------------------
PM MAIL WWW   Вверх
mes
Дата 25.12.2008, 23:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


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

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



я тут подумал и нашел куда присобачить стек.. держи.. надеюсь не поздно 

Код

// char_stack.h

typedef char char_stack_value;

struct char_stack_node
{
// private:

   char_stack_value  value;
   char_stack_node * next;
};

struct char_stack
{
// private:
   char_stack_node * head;
   unsigned          size;
};

void char_stack_create(char_stack& st) // конструктор
{
    st.head = NULL;
    st.size =0;
}
bool char_stack_is_empty (char_stack& st) // пустой ли стек ?
{
    return st.head == NULL;
// или
//  return st.size == 0;

}
bool char_stack_size (char_stack& st) // рамер стека
{
    return st.size;
}
void char_stack_push (char_stack& st, char_stack_value value) // запихиваем
{
    char_stack_node * node = new char_stack_node;
    node->value = value;
    node->next = st.head;
    st.head=node;
    ++st.size;
}
char_stack_value char_stack_pop (char_stack& st) // достаем
{
    if (!st.head) return char_stack_value();
    char_stack_node * node = st.head;
    char_stack_value value = node->value;
    st.head = st.head->next;
    delete node;
    --st.size;
    return value;
}

void char_stack_destroy (char_stack& st) // деструктор
{
      while (!char_stack_is_empty(st)) char_stack_pop(st);
}



Код

//lv.h
#include <iostream>
#include "char_stack.h"

struct lv_value
{
// private: 
    char *data;
};

size_t lv_length (const lv_value& lv)
{
    unsigned sz=0; for (char * p = lv.data; *p; ++p) ++sz;
    return sz;
}
void lv_create (lv_value& lv) // конструктор 1
{
     lv.data = new char[2];
    *lv.data = '0';
    *(lv.data+1) = '\0';
}

void lv_create (lv_value& lv, const char * str) // конструктор 2
{
    const char * p = str;
    for (;isdigit(*p); ++p) ;   // ищем первый не символ,

    lv.data = new char[p-str];  // создаем внутренний массив
    char * p1 = lv.data;
    for (;str<p; ++str, ++p1) *p1 = *str; // копирование нужных символов
    *p1= '\0';
}

void lv_create (lv_value& lv, char_stack st) // конструктор по стеку(число в стеке в "нормальном" порядке
{
     const unsigned size = st.size;
     lv.data = new char[size+1];
     for (char * p = lv.data; !char_stack_is_empty(st); ++p) *p = char_stack_pop(st);
     *(lv.data+size) = '\0';
}

void lv_create (lv_value& dst, const lv_value& src) // конструктор копий
{
    const unsigned size = lv_length(src);
    dst.data = new char[size+1];  // создаем внутренний массив

    char * p  = src.data;
    char * p1 = dst.data;

    for (int i=0; i<size; ++p, ++p1) *p1 = *p; // копирование нужных символов
    *p1= '\0';
}

void lv_destroy (lv_value& lv)   // деструктор
{
    if (lv.data!=NULL) delete[] lv.data;
    lv.data = NULL;
}

std::ostream& operator << (std::ostream& o, const lv_value& lv)
{
    if (lv.data) o << lv.data;
    return o;
}

void lv_add (const lv_value& lv1, const lv_value& lv2, lv_value& res)
{
     lv_destroy(res);

     char_stack st1, st2, st;
     char_stack_create (st1);
     char_stack_create (st2);
     char_stack_create (st);

     for  (char *p = lv1.data; *p; ++p)  char_stack_push(st1, *p); // заполняем первый стек
     for  (char *p = lv2.data; *p; ++p)  char_stack_push(st2, *p); // заполняем второй стек

     int mental = 0;

     while (!char_stack_is_empty(st1) || !char_stack_is_empty(st2))
     {
        int value = mental;
        if (!char_stack_is_empty(st1)) value += char_stack_pop(st1)-'0';
        if (!char_stack_is_empty(st2)) value += char_stack_pop(st2)-'0';

        char_stack_push (st, value%10+'0');

        mental = value/10;
     }
     if (mental) char_stack_push (st, mental+'0');
     lv_create (res, st);

     char_stack_destroy (st);
     char_stack_destroy (st1);
     char_stack_destroy (st2);
}


ну а main должен подойти без изменений. 
P.S private: означает что доступ к этой секции, только из "своих" функций. 



Это сообщение отредактировал(а) mes - 26.12.2008, 22:11


--------------------
PM MAIL WWW   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Для новичков"
JackYF
bsa

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь


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

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


 




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


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

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