Ru-Board.club
← Вернуться в раздел «Прикладное программирование»

» Вопросы по программированию на C/С++

Автор: akaGM
Дата сообщения: 28.05.2009 15:05
Xakep007
спец-тема есть
поищи в путеводителе или лучше в фильтре

http://forum.ru-board.com/topic.cgi?forum=33&topic=4451#1
Автор: Raimir
Дата сообщения: 30.05.2009 14:08
Товарищи прграммеры помогите новенькому ПЛИЗ!!!!Лето...зачеты...
Итак проблема в том что я не могу эту прогу раскидать по файлам..то есть именно функцию GetEXAM(TObject *p,int exm).count как видите я объявил глобально шоб и для main было видно но когда отделяю функцию в Function.h то одни траблы..где я только не пробовал этот count ставить - ниче. extern и volatile тоже не помогают..объясните пожалуйста чайнику че тут не так то есть куда и с чем присунуть этот count???

[more]
вот исходник:

#include <iostream.h>
#include <string.h>
#include <typeinfo>
int count = 0;
int c=0;
class TObject {
public: virtual void Show() = 0;
     };
        
struct Titem {
TObject *Item;
     Titem *next;
     };
class TGroup : public TObject
{
     protected : Titem *tp;
         char *sname;
        public:
         TGroup (char *snm);
             TGroup (TGroup&);
             virtual ~TGroup();
             virtual void Show () = 0;
             char* GetName();
             void SetName(char *snm);
             void Insert (TObject* obj);
        };
        
TGroup :: TGroup (char *snm){ tp =0;
sname = new (char[30]);
                strcpy (sname,snm);
             }
TGroup :: ~TGroup () {free(tp);}
char* TGroup :: GetName () {cout<<sname<<endl;}
void TGroup :: SetName (char* snm) {strcpy (sname,snm);}
void TGroup :: Insert (TObject* obj)
{
                 Titem *p;
                 if (tp == 0)
                 {
                     tp = new(Titem);
                     tp->next=0;
                     tp->Item = obj;
                     }
                    else
                     {
                     p = new(Titem);
                     p = tp;
                     while (p->next!=0) p=p->next;
                     p->next=new(Titem);
                     p=p->next;
                     p->Item=obj;
                     p->next=0;
                     }
                    }
                    
typedef void (*PF)(TObject* ,int);

class Student : public TGroup{
protected : int exam;
                public:
                 Student(char* snm,int exam);
                     Student(Student &ST);
                     virtual ~Student();
                     void Show();
                     int GetExam();
                     void SetExam(int ex);
                     void ITERAT (PF action,int ex);
                };
                
Student :: Student (char* snm,int ex) : TGroup(snm) { exam = ex;}
Student :: ~Student () {}
void Student :: Show(){ cout<<"Студент : "<<sname<<"\nЭкзаменов сдал: "<<exam<<endl;}
int Student :: GetExam() {return exam;}
void Student :: SetExam(int ex) {exam = ex;}
void Student :: ITERAT (PF operation,int ex)
{
                     Titem* p;
                        p = new (Titem);
                        p = tp;
                        while (p!= NULL)
                         {
                         operation(p->Item,ex);
                         p = p->next;
                         }
                         }
    

class Expirience: public TObject {
protected :
char *name;
         int quiz,time;
         Expirience *next;
         static Expirience *begin;
public:
Expirience ();
         Expirience (char* e, int qu,int t);
         ~Expirience ();
         void Insert();
         static void Print();
         virtual void Show() = 0;
         };

Expirience* Expirience :: begin = 0;
Expirience :: Expirience ()
{
         name = new (char [30]);
         quiz = 0;
         time = 0;
         };
Expirience :: Expirience (char* e,int qu,int t)
{
         name = new (char[30]);
         strcpy(name,e);
         quiz = qu;
         time = t;
         }
Expirience :: ~Expirience ()
{
         free(name);
         }
void Expirience :: Insert()
{
         bool flag;
         Expirience *p;
         flag = false;
         if (begin == 0)
         {
         begin = this;
         next = 0;
         }
         else
         {
         p = begin;
         while (p->next!=0)
         {
             if(p==this)
             {
             flag = true;
             break;
             }
             p = p->next;
             }
             if (flag==false)
             {
             next = 0;
             p->next = this;
             }
         }
         }
void Expirience :: Print ()
{
         Expirience *p;
         if(begin!=0)
         {
         p=begin;
         cout <<"-----------------Список предметов----------------\n";
         while(p!=0)
         {
             cout<<p->name<<endl;
             p = p->next;
            }
         cout <<"-------------------------------------------------\n";
         }
         }                                                                                             
class Examine : public Expirience {
protected: char* stud;
         int tick;
         public : Examine();
         Examine(char* e,int qu,int t,int ti,char* s);
                ~Examine();
                void Show();
                void Get();
                  };                                                 
Examine :: Examine () {stud = new(char[30]);}
Examine :: Examine (char* e,int qu,int t,int ti,char* s) : Expirience (e,qu,t) {stud = new(char[30]);
strcpy(stud,s);
                         tick = ti;
}
Examine :: ~Examine () {free(stud);}
void Examine :: Show() {cout<<name<<endl;}

             
void GetEXAM (TObject *p,int exm)
         {
         if (typeid(*p)==typeid(Examine)){
         ((Examine*)p)->Show();
         c++;
         if (c==3){
         c=0;
         count++;
         }
         }
         if (typeid(*p)==typeid(Student))
         {
         cout<<"\n----------------Студент------------------\n";
         ((Student*)p)->Show();
         cout<<"Экзаменов не сдано : "<<exm-(((Student*)p)->GetExam())<<"\n";
         cout<<"Сдавшие экзамены : \n";
     ((Student*)p)->ITERAT(GetEXAM,3);
         cout<<"-----------------------------------------\n\n";
         }
        
         };
        

    int main()
     {
     PF fp = GetEXAM;
     Examine inf("ИНФОРМАТИКА",5,120,30,"Все"), mat ("МАТЕМАТИКА",6,45,60,"10"), fhys("ФИЗИКА",3,45,100,"5");
     Student Gr("Группа 37A",4),st1("Иванов В.С.",3), st2("Петров А.А.",2), st3("Андреев С.Н.",2), st4("Сидоров С.М.",1), st5("Козырев Н.П.",3),st6("Корнев Ж.Н.",1);
     st1.Insert(&inf);
     st1.Insert(&mat);
     st1.Insert(&fhys);
     st2.Insert(&mat);
     st2.Insert(&fhys);
     st3.Insert(&mat);
     st3.Insert(&inf);
     st4.Insert(&inf);
     st5.Insert(&mat);
     st5.Insert(&fhys);
     st5.Insert(&inf);
     Gr.Insert(&st1);
     Gr.Insert(&st2);
     Gr.Insert(&st3);
     Gr.Insert(&st4);
     Gr.Insert(&st5);
     Gr.ITERAT(fp,3);
     cout<<"\n"<<count<<" студента не сдали свои экзамены до конца!!!\n";
     return 0;
    };
         

вот мейкфайл

#makefile

make: main.cpp Expirience.o Examine.o TGroup.o Student.o
    g++ Expirience.o Examine.o TGroup.o Student.o main.cpp -o EXE
expirience: Expirience.h Expirience.cpp
    g++ Expirience.cpp -c
examine: Examine.h Examine.cpp
    g++ Examine.cpp -c
tgroup: TGroup.h TGroup.cpp
    g++ TGroup.cpp -c
student: Student.h Student.cpp
    g++ Student.cpp -c
clr: *.o
    rm *.o

[/more]

             
Автор: akaGM
Дата сообщения: 30.05.2009 15:24
Raimir
ты сам-то понял что спросил?
и спрячь свою программу под кодом more: самый последний код в таблице http://i.ru-board.com/codes.html
Автор: Raimir
Дата сообщения: 30.05.2009 18:30
я хочу сделать прогу многофайловой(нужно так).я говорю если сделать ее такой (ну раскидать там классы по отдельности и т. д) то у меня переменная count (в функции GetEXAM) не компилируется...жалуется что не обьявлена.... Если добавить ее в еще один фаил то жалуется что обьявлена дважды...пробовал обьявлять и через extern int count тоже не получаестя пишет multiple definition of "count" . вот хотел узнать в чем проблема то???как и где обьявить count чтобы она осталась такой же глобальной.???
Автор: akaGM
Дата сообщения: 30.05.2009 19:18
Raimir
ну заведи отдельный инклудник со всеми глобальными функциями/переменными, не принадлежащим ни к каким классам и подключай его во всех своих остальных файлах...
что-то типа:

Код: globals.h

#ifndef __GLOBALS_H
#define __GLOBALS_H

// здесь пиши всё что у тебя будет глобальным
int count = 0;

#endif //__GLOBALS_H

использование:
например, для Student.h

#include "globals.h"
Автор: Abs62
Дата сообщения: 30.05.2009 22:19
akaGM
Засунуть определение в хидер - это вредный совет.

Raimir
В h-файле: external in count;
В cpp-файле (в одном и только в одном): int count=0;
Автор: akaGM
Дата сообщения: 31.05.2009 13:34
Abs62
да, действительно, тем более, что сам делал как ты говоришь
"давненько не брал я в руки шашки", совсем нюх потерял...

---
а у тебя ошибка определения типа :P
и вместо extern теперь external? или тоже описАлся?
Автор: Marinarr
Дата сообщения: 01.06.2009 17:32
мне очень нужна помощь в решении задач на Visual С++. они не сложные, но я совсем не знаю язык.
1)написать процедуру поиска всех делителей заданного числа и их сумму
2)определить факториал числа N. оформить в виде функции.
3)с клавиатуры вводится последовательность целых чисел, заканчивающихся 0. определить, является ли последовательность убывающей. оформить в виде функции.
4)составить программу для графического изображения делимости чисел от 1 до N. в каждой строке напечатать само число и столько плюсов, сколько делителей у числа. например: для N=4 должно быть напечатано
1+
2++
3+++
4+++
оформить в виде процедуры.

Буду очень благодарна за помощь.

Добавлено:
можно по почте marina.rr@mail.ru
Автор: Abs62
Дата сообщения: 01.06.2009 18:02
akaGM

Цитата:
а у тебя ошибка определения типа
и вместо extern теперь external? или тоже описАлся?

Не, не описался. Очепятался, паскаль вспомнив.
Автор: akaGM
Дата сообщения: 01.06.2009 18:22
Abs
надо же, уж кого-кого, а тебя в "паскалелюбии" не обвинишь,
да и асм вроде весь из себя extern'ый...
{offtop}
это с каким это зелёным уродом ты меня зацитировал?
Автор: TeXpert
Дата сообщения: 01.06.2009 19:14
Marinarr
Цитата:
...они не сложные
А алгоритм-то есть? Уж это-то от языка не зависит, можешь сама придумать
Цитата:
4)составить программу для графического изображения делимости чисел от 1 до N. в каждой строке напечатать само число и столько плюсов, сколько делителей у числа. например: для N=4 должно быть напечатано
1+
2++
3+++
4+++
Афигеть, это как? Получается, у числа n имеется ровно n же делителей? Боюсь, эдак ты ничего не сдашь
Здесь есть топик по решению задач на C/C++, напиши там, только уж подкорректируй
Автор: Abs62
Дата сообщения: 01.06.2009 19:18
akaGM

Цитата:
надо же, уж кого-кого, а тебя в "паскалелюбии" не обвинишь

А я ещё и с фортраном когда-то ковырялся.

Цитата:
да и асм вроде весь из себя extern'ый...

Extrn'ый, если уж быть точным.

Цитата:
это с каким это зелёным уродом ты меня зацитировал?

Это не я, это движок форума при включённых смайликах.
Автор: akaGM
Дата сообщения: 01.06.2009 19:41
Abs

Цитата:
А я ещё и с фортраном когда-то ковырялся.

понятное дело...
тогда ведь С в стадии "В" ещё был...

граф. смайлы маздай...
Автор: ChiPnGo
Дата сообщения: 09.06.2009 17:14
Как минимизировать операции копирования при использовании istream? Т. е. нужно читать файл по кусочкам, записывая данные в мой буффер (пока это в виде istr.read(buf, length)). Мб, можновзять что-то совсем другое?

Хотелось бы в таком духе:

Код:
char buf[BUFFER_SIZE];
fin.rdbuf()->pubsetbuf(buf, BUFFER_SIZE);
fin.sync();
Автор: Abs62
Дата сообщения: 09.06.2009 17:38
ChiPnGo
Забыть про потоки и перейти к низкоуровневым функциям. А в чём проблема?
Автор: ChiPnGo
Дата сообщения: 10.06.2009 23:35
Да, этот вариант всегда есть.

Кто-то работал с zlib в случаях, когда надо распаковать зип из зипа? Хочу обойти переписывание вложенного зипа на диск перед распаковкой.
Автор: V0lt
Дата сообщения: 03.07.2009 15:58
Как узнать высоту меню (там где обычно File, Edit и т.п.)?
Как узнать высоту заголовка окна?
Автор: Abs62
Дата сообщения: 03.07.2009 16:28
V0lt

Цитата:
Как узнать высоту меню (там где обычно File, Edit и т.п.)?

Если речь о Windows - GetSystemMetrics(SM_CYMENU)

Цитата:
Как узнать высоту заголовка окна?

GetSystemMetrics(SM_CYCAPTION)
Автор: V0lt
Дата сообщения: 03.07.2009 18:16
Abs62
спасибо, я тоже к этому пришел
Эти параметры ведь системные? A у моего окна могут быть свои значения?

Ну и обратный вопрос: Как поменять SystemMetrics?
Автор: Abs62
Дата сообщения: 04.07.2009 16:51
V0lt

Цитата:
A у моего окна могут быть свои значения?

Вроде нет. Разве что рисовать всё самостоятельно.

Цитата:
Ну и обратный вопрос: Как поменять SystemMetrics?

Покопай SystemParametersInfo с параметром SPI_SETNONCLIENTMETRICS. Ну, и другими по необходимости.

PS. Такие вопросы лучше обсуждать в теме по WinAPI.
Автор: V0lt
Дата сообщения: 04.07.2009 17:19
Abs62
ок, собственно менять уже ничего не надо. я хотел определить что давало пару лишних пикселей на имеющимся окне, теперь разобрался.
Автор: nesnakomez
Дата сообщения: 05.07.2009 14:47
всем привет.
как мне разместить этот код у себя на странице. я пишу страницу на яндексе при помощи канструктора. вот этот код.

Код: <anchor>Инструкции по отправке SMS <go href="http://wap.smszamok.ru/iget.php?pid=27973&url=[url]"></go></anchor>
Автор: Hiken
Дата сообщения: 05.07.2009 22:02
nesnakomez
А причем тут Cpp?!
Автор: nesnakomez
Дата сообщения: 06.07.2009 00:43
Hiken что такое Срр? я что не правильно выбрал раздел да?
прошу извенения.


Добавлено:
ребята извените я не в тот раздел попал. всё я пошол в другой.
Автор: compikk
Дата сообщения: 09.07.2009 13:29
Здравствуйте.
Есть исходник от программы, нужно немного поменять его.
Нужно сделать возможность выбора в программе - чтоб можно было выбрать, что на что менять. Результат нужен в виде программы (.exe).
Заранее большое спасибо.

Код: #include <iostream>
#include <fstream>
using namespace std;
int main() {

char a[200], b[200];
int i,j;

ifstream text("C:\\1.txt");
ofstream text2("C:\\2.txt");
while (!text.eof())
{
text.getline(a,200);
i=0;j=0;
while(a[i]!='\0')
{
if(a[i]=='|')
{
b[j]=',';
b[j+1]=' ';
j++;
}
else{
b[j]=a[i];
}
i++;
j++;
}
b[j]='\0';
cout<<b<<endl;
text2<<b<<'\n';
}

return 0;
}
Автор: compikk
Дата сообщения: 10.07.2009 02:52
UP!


Цитата:
Здравствуйте.
Есть исходник от программы, нужно немного поменять его.
Нужно сделать возможность выбора в программе - чтоб можно было выбрать, что на что менять. Результат нужен в виде программы (.exe).
Заранее большое спасибо.

Код:
#include <iostream>
#include <fstream>
using namespace std;
int main() {

char a[200], b[200];
int i,j;

ifstream text("C:\\1.txt");
ofstream text2("C:\\2.txt");
while (!text.eof())
{
text.getline(a,200);
i=0;j=0;
while(a[i]!='\0')
{
if(a[i]=='|')
{
b[j]=',';
b[j+1]=' ';
j++;
}
else{
b[j]=a[i];
}
i++;
j++;
}
b[j]='\0';
cout<<b<<endl;
text2<<b<<'\n';
}

return 0;
}

Автор: nick7inc
Дата сообщения: 11.07.2009 15:17
Есть ли вариант для инициализации массива объектов в C? Пример: можно занулить буффер при помощи memset(), но интересно, как буффер, подготовленный для группы объектов проинициализировать значением по-умолчанию.

Знаю способы:
1. Можно в цикле присвоить каждому элементу значение;
2. Можно определить конструктор по-умолчанию и создать массив new[]().

Но интересует, есть ли функция наподобие memset() для размножения одного объекта на весь буффер?
Автор: ItsJustMe
Дата сообщения: 12.07.2009 12:36
Насколько я знаю, CPU может заполнять массивы элементов размером 1,2,4,8 байт. Т.е. если твой массив состоит из элементов этих размеров, то можно одной командой, иначе - только в цикле. Ну, и сам понимаешь, если каждый элемент твоего массива - указатель, то заполнять такой массив имеет смысл только в цикле. Ну если, конечно, не собираешься заполнять нулями или одним единственным значением.
Автор: nick7inc
Дата сообщения: 12.07.2009 19:12
ItsJustMe
Ясно. Я имел ввиду общий случай, значит только в цикле. А с указателями, как правило, заполняется массив нулями, что я умею.
Автор: KonstantinEl
Дата сообщения: 12.07.2009 19:34
прошу прощение за офтоп , просто не знаю в какую ветку написать ,
Вопрос такой - нужно написать строчку "ESC"%-12345X , где <Esc> - символ "Escape" с кодом 27 (1Bh), и сказано, что делается в любом HEX-редакторе. Просветите плиз, ума не приложу, как это сделать? Редактор установил, а что дальше ...одни вопросы

Страницы: 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193

Предыдущая тема: не знаю как назвать тему :-)


Форум Ru-Board.club — поднят 15-09-2016 числа. Цель - сохранить наследие старого Ru-Board, истории становления российского интернета. Сделано для людей.