Вопросы по программированию

Автор Богдан, 03 Листопад 2007, 11:41:18

Попередня тема - Наступна тема

Edd.Dragon

#250
Цитата: Garfi від 13 Жовтень 2008, 20:39:08
черт...перепутал...
pow(число, степень)...
Ну вот! И какая же у тебя степень после запятой? Где двойка, я вас спрашиваю? (с) )))

Цитата: Garfi від 13 Жовтень 2008, 20:39:08
насчет умножения знаю...
Так а почему у тебя в цикле

а) считаем член_последовательности (ЧП);
б) запихиваем ЧП в результ, теряя то, что там было до этого.

вместо

а) считаем член_последовательности (ЧП);
б) умножаем предыдущий_результ на полученный ЧП

т.е. новый_результ = старый_результ * посчитаный_член ;)


А double - это тип. double(i) - это преобразование целого i в вещественное, т.к. если 1 - целое, i - целое, то 1 / i - это целочисленное деление.

hint
Впрочем ты мог написать так: (1.0 + 1.0 / i). Теперь единица уже не целая и проблем при делении не будет, i будет автоматом преобразовано, зато так меньше скобок и писанины - лучше читается.


Итак:
1. Возводить надо в квадрат - ты возводишь в i-тую степень.
2. Каждый посчитанный член ты не умножаешь на предыдущий результат, а просто заменяешь то, что было. А надо то_что_было умножить на новое и уже этим заменить то_что_было (a = a * k).
3. Ну и присмотрись ЧТО ты возводишь в степень, а что надо. Вроде как на картинке в квадрат возводится только i, нет?

Garfi

вот, что получилось:
Цитата
  res=1;
  for (int i=1;i<=n; i++)
 
  {
    k=1+1/pow(i,2);
   res*=k;
  }
при n=2 показ. правильный рез-тат, при n=3 уже бред... :-\

Phantom of the Opera

"k" і "res" - float (real, single чи як їх там в C) ?
"Мыслящий ум - тот, который постоянно учится, никогда не делая заключений; стили и шаблоны уже приведены к заключениям, и, таким образом, они не могут способствовать мышлению." Брюс Лі

Edd.Dragon

приведи весь код с обявлением переменных

и что именно выводит


лучше выводить каждый член:

res=1;
  for (int i=1;i<=n; i++)
 
  {
    k=1+1/pow(i,2);
    res*=k;
    printf("i = %d; k = %f \n", i, k);
  }


Garfi

#254
все работало, и уже давно результат правильный...я оказывается результат на калькуляторе неправильно посчитал... ^_^

edd_k, спасиб за идейку с printf(). :)

Edd.Dragon

Цитата: Garfi від 13 Жовтень 2008, 22:06:46
все работало, и уже давно результат правильный...я оказывается результат на калькуляторе неправильно посчитал... ^_^
Я так и подумал ;)

Ivan_32

Listbox , Combobox. Через какое сообщение перхватывать сообщения от этих элементов управления ? Я пробовал через WM_COMMAND толку ноль...

case WM_COMMAND:
{
  switch(wparam)
  {
   case listbox:{MessageBoxA(0,0,0,0);}break;
  }
}break;

На клики реакции ноль, на селект элемента аналогично...
PS:Рассказали про какое то сообщение HW_MESSAGE, оно существует ? Если да то подскажите его численное значение.
Заранее благодарен.
Чем больше я узнаю, тем больше чувствую себя дураком...

Юрец

#257
Чтобы не создавать новую тему, задам (думаю банальный) вопрос тем кто работает с VisualStudio:
При открытии старых проэктов (из VS 6) мне каждый раз вылазит подтверждение на конвертацию проэкта до версии нынешней студии, сохраняю и опять...

ПОЧЕМУ?

2kin

Yes to all  нажать да и все. Просто , старый формат проектов должен быть преобразован.

Edd.Dragon

#259
http://msdn.microsoft.com/en-us/library/ms647591(VS.85).aspx
The WM_COMMAND message is sent when the user selects a command item from a menu, when a control sends a notification message to its parent window, or when an accelerator keystroke is translated.

P.S.: Занеси MSDN в закладки и там же попробуй поискать нужное.
Вот буквально пару кликов в дереве оглавления и найден раздел "Windows Controls"


Юрец

Цитата: 2kin від 14 Жовтень 2008, 11:30:55
Yes to all  нажать да и все. Просто , старый формат проектов должен быть преобразован.
Цитатамне каждый раз вылазит подтверждение на конвертацию

Edd.Dragon

Потому что ты каждый раз открываешь СТАРЫЙ файл проекта. Файлы проекта нового образца имеют совсем иное расширение.

Юрец

Цитата: edd_k від 14 Жовтень 2008, 11:48:20
Потому что ты каждый раз открываешь СТАРЫЙ файл проекта. Файлы проекта нового образца имеют совсем иное расширение.
Это само собой, выводится ведь подтверждение именно на конвертацию, которая должна быть одноразовая !

Нужно наверное создать новый проэкт и добавить в него файлы

Edd.Dragon

Цитата: Юрец від 14 Жовтень 2008, 11:54:53
Это само собой, выводится ведь подтверждение именно на конвертацию, которая должна быть одноразовая !
Еще раз. Ты открываешь файл .dsp, в ктором хоть 1 раз, хоть триста находится проект в старом формате. В нем не может находиться проект в новом формате. Принципиально (если конечно ты сам расширение с cproj не понял на старое dsp). Сохраняешь ты файлы с кодом, а сам файл проекта ты НЕ пересохранил в новом формате.

user_lol

Вот кусочек кода. Выдает синтаксическую ошибку перед else. Не пойму почему. Помогите, плиз:


while (q<A[i])
    {
          x=A[i]%q;
          if (x==0) f=0; break;
          else
          {
               f=1;
               q++;
          }       
    }

βεερ_βooρ

Цитата: user_lol від 20 Жовтень 2008, 23:18:59
Вот кусочек кода. Выдает синтаксическую ошибку перед else. Не пойму почему. Помогите, плиз:


while (q<A[i])
    {
          x=A[i]%q;
          if (x==0) f=0; break;
          else
          {
               f=1;
               q++;
          }       
    }

Если я правильно понял что ты имел ввиду...

while (q<A)
    {
          x=A%q;
          if (x==0) { f=0; break; }
          else
          {
               f=1;
               q++;
          }       
    }
Fear is the path to the dark side. Fear leads to anger. Anger leads to hate. Hate leads to suffering.
All that's here is Fear! Suppression! Betrayal! Despair! Contempt! Regret! Sadness! Anguish! Madness! And Pain, right?

user_lol

Именно. Спасибо за помощь. Можна было и самому догадаться. Вам "+".

Edd.Dragon

Цитата: user_lol від 20 Жовтень 2008, 23:36:05
Именно. Спасибо за помощь. Можна было и самому догадаться. Вам "+".
Привыкай ставить фигурные скобки ВСЕГДА и с новой строки, тогда не будет проблем типа "смотрю в книгу - вижу фигу", т.к. скобки ты будешь ставить автоматически )))

Даже когда надо написать что-то типа if(a > b) b = a; лучше писать


if(a > b)
{
    b = a;
}


А то в одном случае два коротких оператора в одну строку, а тут же ниже точно такие же короткие строки уже отформатированы - я бы тоже так путался ;)

Haker

Доброго времени суток! У меня началась учеба, и приходиться учить программирование на С.
Проблема в следующем:

#include <iostream.h>
int main ( )
{
   std::cout << "welcome to c++!\n";
   return 0;
}
Выдает следующие ошибки -
1 Type qualifier 'std' must be a struct or class name
2 Statement missing
В чем проблема? Помогите пожалуйста.

FalseMan

#269
#include <iostream>
int main ( )
{
   std::cout << "welcome to c++!\n";
   return 0;
}

вот так попробуй ;)

Alternativshik

#include <iostream>
int main ( )
{
   cout << "welcome to c++!\n";
   return 0;
}

:-\

Edd.Dragon

Цитата: Alternativshik від 22 Жовтень 2008, 13:25:55
#include <iostream>
Выше уже исправил FalseMan
Правда нацитировал лишнего...

FalseMan

#272
Цитата: Alternativshik від 22 Жовтень 2008, 13:25:55
#include <iostream>
int main ( )
{
   cout << "welcome to c++!\n";
   return 0;
}

:-\
не, неймспейс надо указать, если просто iostream(без .h)

Edd.Dragon

Цитата: FalseMan від 22 Жовтень 2008, 13:52:23
не, неймспейс надо указать, если просто иостреам(без .h)
Не если просто, а если в заголовочном файле нужные классы\функции в неймспейсе. Даже если это тобой написаный .h, т.е. который ты подключаешь #include "my.h", а в нем неймспейс, то конечно его надо указывать, на то они и задуманы, чтобы разруливать конфликты имен.

FalseMan

Цитата: edd_k від 22 Жовтень 2008, 14:16:47
Не если просто, а если в заголовочном файле нужные классы\функции в неймспейсе. Даже если это тобой написаный .h, т.е. который ты подключаешь #include "my.h", а в нем неймспейс, то конечно его надо указывать, на то они и задуманы, чтобы разруливать конфликты имен.
с этим я согласен, просто я написал именно для <iostream(.h)>
Цитата: FalseMan від 22 Жовтень 2008, 13:52:23
не, неймспейс надо указать, если просто iostream(без .h)
т.к. iostream.h AFAIK содержит описание без неймспейсов

Haker

У меня борланд Си 3.1. Вроде ошибки вытравил, но на дисплей ничего не выводит. Цтрл+ф9 жму, экран мигает и возвращается обратно в редактор.
Пробывал еще так
#include <stdio.h>
Int main ( )
{
   printf ("welcome/n");
   return 0;
}
Тожен ничего не показывает.

FalseMan

#276

#include <stdio.h>
Int main ( )
{
   printf ("welcome/n");
   return 0;
}

во первых не I а i
во вторых AFAIK в борланде специальная комбинация клавиш (чтото типа UserScreen)

Haker

Гм, настроил на виндовс апп. Создает екзешники и они работают.
Вы мне тупому объясните, что за афаик такой?  Если инклуды пишу без *.h, то ругается.
Еще если так пишу std:;cout перестает ругаться, и тогда екзешник работает.

Edd.Dragon

Цитата: Haker від 22 Жовтень 2008, 18:56:07
Еще если так пишу std:;cout перестает ругаться, и тогда екзешник работает.
Ну так cout находится в пространстве имен std. Без указания пространства его не видно.

Напиши в начале проги using namespace std; тогда не придется каждый раз писать возле имен из этого пространства.

Цитата: Haker від 22 Жовтень 2008, 16:00:39
Тожен ничего не показывает.
Неправда. Все показывает, только тут же исчезает - как в проге написано так и происходит. Нужна пауза, ну или запуск в окне, которое не закроется по завершению. Так что все правильно ;)

Haker

Цитата: edd_k від 22 Жовтень 2008, 19:23:56
Ну так cout находится в пространстве имен std. Без указания пространства его не видно.

Напиши в начале проги using namespace std; тогда не придется каждый раз писать возле имен из этого пространства.
Неправда. Все показывает, только тут же исчезает - как в проге написано так и происходит. Нужна пауза, ну или запуск в окне, которое не закроется по завершению. Так что все правильно ;)

спасибо. Буду пробывать.

resiver

Добре время суток!Уважаемые модераторы нужна помощ при написании программы.
Вот условие: "Построить список натуральных чисел длинной N. Сжать полученный список, убрав все четные числа". Частично разобрался с заданием но реализовать код не смог на С++ вот и прошу вашей помощы. ЗАРАНЕЕ БЛАГОДАРЕН!
Подпись отображается внизу каждого Вашего сообщения. Вы также можете использовать BB код и смайлы.

Edd.Dragon

Так что смог, а что нет? )))

Напиши отдельные функции для ключевых подзадач:

Подзадача 1: Ответь на вопрос "Вот это переданное тебе число A является простым?", вернув "да" или "нет" (поделить его нацело на все числа от 2 до A/2 и если ни разу не выйдет без остатка - значит простое)

Подзадача 2: Вот тебе число N, перебери все числа от 1 до N и верни все (массив) простые из них (используя предыдущую функцию заполнить новый массив числами, для которых она ответит, что они простые).

Подзадача 3: Вот тебе массив чисел. Верни мне из него только половину (т.е. надо заполнить новый массив, выбирая из старого числа через одно).

Ну и собственно в main() ты сначала вводишь N. Потом при помощи функции 2 получаешь все простые и из результата при помощи функции 3 получаешь половину.

FalseMan


resiver

Уважаемый edd_k логика псевдокода правильная ну а вот реализовать ето с помощу списка не могу, ишо не до конца со списками разобрался ну вот чуток кода уже написал:
#include <stdio.h>
#include <stdlib.h>

   int main () {
   
     int n;

   //proceduri nad spiskom

    struct TInfo {
      int n; 
      *start;
     }*next;
   
start = NULL;
next = NULL;

    for (n=0; n <20; n++) {
    p = new TInfo;
    printf ("Vedite peremennuyu1:\n" );
    scanf ("%d", &n);

a = p->next;
    }

помогите дописать до конца.
Подпись отображается внизу каждого Вашего сообщения. Вы также можете использовать BB код и смайлы.

resiver

Помоему Подзадача 3: Вот тебе массив чисел. Верни мне из него только половину (т.е. надо заполнить новый массив, выбирая из старого числа через одно). Ето лишнее, мне просто напросто надо пройтись по всем числа и узнать чотное оно или нет, если нет то вывести его на екран, ну вот как ето описать в списках я не сильно разбираюсь.
Подпись отображается внизу каждого Вашего сообщения. Вы также можете использовать BB код и смайлы.

Edd.Dragon

#285
Цитата: FalseMan від 24 Жовтень 2008, 13:37:28
простым
Может четным? :)
Упс. Кажись я усложнил задачу  :D
Вместо натуральных думал о простых. А под четными понял, что нужно убрать каждый второй элемент массива.


Цитата: resiver від 24 Жовтень 2008, 13:54:00
Помоему Подзадача 3: Вот тебе массив чисел. Верни мне из него только половину (т.е. надо заполнить новый массив, выбирая из старого числа через одно). Ето лишнее, мне просто напросто надо пройтись по всем числа и узнать чотное оно или нет, если нет то вывести его на екран, ну вот как ето описать в списках я не сильно разбираюсь.
Да, все проще, чем я прочел в первый раз, попутав натуральные с простыми %)

Первая подзадача вообще не нужна. Вторая собственно тоже - тебе в начале нужно банально создать массив из чисел 1, 2, 3, ... N. А потом сформировать новый массив (точнее поздвигать в этом судя по слову "сжать"), убрав все четное.


Цитата
struct TInfo {
      int n; 
      *start;
     }*next;
Это никакой компилятор не поймет так, как ты эту запись понял...

Если нужен список, то выглядеть это должно например так:


typedef struct ListItem
{
   int value;
   ListItem* next;

   ListItem(int value)
  {
      this.value = value;
  }
};


.....................

ListItem* root;



Но вообще, если речь идет о C++, то списки в его стандартной библиотеке шаблонов (STL) и так есть: list<int>.

FalseMan

#286
1. не пиши 2 поста подряд. есть кнопка "изменить"
2. я не пойму:
  1)тебе обязательно самому реализовать список?
  2)на С или С++?
просто если плюсы то можно взять  std::list или чтото типа того(вектор,дек)
http://www.cplusplus.com/reference/stl/list/erase.html

Edd.Dragon

Цитатаstart = NULL;
next = NULL;

    for (n=0; n <20; n++) {
    p = new TInfo;
    printf ("Vedite peremennuyu1:\n" );
    scanf ("%d", &n);

a = p->next;
А здесь что такое start = NULL? Объявления переменной start нигде не было.



FalseMan

//proceduri nad spiskom

    struct TInfo {
      int n;
      *start;
     }*next;
   
start = NULL;
next = NULL;

Долго думал что чему принадлежит ???

Edd.Dragon

#289
Вот такая штука у меня получилась (начальное и конечное значение для создания списка задаем в параметрах запуска):

#include <stdio.h>
#include <stdlib.h>


// элемент списка (при создании и удалении корректирует соседние элементы)
// ссылка на предыдущий есть хоть и не используется в самой задаче
// без нее не получится корректировку ссылок по-человечески при удалении\создании делать
struct ListItem
{
    int value;
    ListItem* prev;
    ListItem* next;
   
    ListItem(const int value = 0, ListItem* prev = NULL, ListItem* next = NULL)
    {
        // заполнение полей структуры
        this->value = value;
        this->prev = prev;
        this->next = next;
       
        // перенаправление соседних элементов на этот
        if(this->prev != NULL)
        {
            this->prev->next = this;   
        }
        if(this->next != NULL)
        {
            this->next->prev = this;
        }
    }
   
    ~ListItem()
    {
        // перенаправление соседних элементов друг на друга
        if(this->prev != NULL)
        {
            this->prev->next = this->next;
        }
        if(this->next != NULL)
        {
            this->next->prev = this->prev;
        }
   
    }
};

// создает список со значениями first..last и возвращает ссылку на первый элемент
// список создается с конца
ListItem* CreateList(int first, int last)
{
    ListItem* current = NULL;

    while(last >= first)
    {
        current = new ListItem(last--, NULL, current);
    }

    return current;
}

// удаляет элементы с четным value и возвращает ссылку на первый элемент (для удобства)
ListItem* ResampleList(ListItem* root)
{
    ListItem* current = root;
    ListItem* next = NULL;
   
    while(current != NULL)
    {
        next = current->next;
        if((current->value & 1) == 0)
        {
            if(root == current)
            {
                root = next;
            }
            delete current;
        }
        current = next;
    }

    return root;
}

// вывод списка на экран
void PrintList(ListItem* root)
{
    while(root != NULL)
    {
        printf("%i\n", root->value);
        root = root->next;
    }
}

int main(int argc, char* argv[])
{
     if(argc != 3)
     {
        printf("Usage:\n   test <first_value> <last_value>\n");
     }             
     else
     {
        PrintList(ResampleList(CreateList(atoi(argv[1]), atoi(argv[2]))));
     }

     return 0;
}



Результат работы:

ЦитатаC:\>test.exe
Usage:
   test <first_value> <last_value>

C:\>test.exe 2 10
3
5
7
9

βεερ_βooρ

Цитата: edd_k від 24 Жовтень 2008, 16:31:26
Вот такая штука у меня получилась (начальное и конечное значение для создания списка задаем в параметрах запуска):

#include <stdio.h>
#include <stdlib.h>


// элемент списка (при создании и удалении корректирует соседние элементы)
// ссылка на предыдущий есть хоть и не используется в самой задаче
// без нее не получится корректировку ссылок по-человечески при удалении\создании делать
struct ListItem
{
    int value;
    ListItem* prev;
    ListItem* next;
   
    ListItem(const int value = 0, ListItem* prev = NULL, ListItem* next = NULL)
    {
        // заполнение полей структуры
        this->value = value;
        this->prev = prev;
        this->next = next;
       
        // перенаправление соседних элементов на этот
        if(this->prev != NULL)
        {
            this->prev->next = this;   
        }
        if(this->next != NULL)
        {
            this->next->prev = this;
        }
    }
   
    ~ListItem()
    {
        // перенаправление соседних элементов друг на друга
        if(this->prev != NULL)
        {
            this->prev->next = this->next;
        }
        if(this->next != NULL)
        {
            this->next->prev = this->prev;
        }
   
    }
};

// создает список со значениями first..last и возвращает ссылку на первый элемент
// список создается с конца
ListItem* CreateList(int first, int last)
{
    ListItem* current = NULL;

    while(last >= first)
    {
        current = new ListItem(last--, NULL, current);
    }

    return current;
}

// удаляет элементы с четным value и возвращает ссылку на первый элемент (для удобства)
ListItem* ResampleList(ListItem* root)
{
    ListItem* current = root;
    ListItem* next = NULL;
   
    while(current != NULL)
    {
        next = current->next;
        if((current->value & 1) == 0)
        {
            if(root == current)
            {
                root = next;
            }
            delete current;
        }
        current = next;
    }

    return root;
}

// вывод списка на экран
void PrintList(ListItem* root)
{
    while(root != NULL)
    {
        printf("%i\n", root->value);
        root = root->next;
    }
}

int main(int argc, char* argv[])
{
     if(argc != 3)
     {
        printf("Usage:\n   test <first_value> <last_value>\n");
     }             
     else
     {
   PrintList(ResampleList(CreateList(atoi(argv[1]), atoi(argv[2]))));
}

return 0;
}



Результат работы:

А объявлять класс чрез структ - новая мода?
Fear is the path to the dark side. Fear leads to anger. Anger leads to hate. Hate leads to suffering.
All that's here is Fear! Suppression! Betrayal! Despair! Contempt! Regret! Sadness! Anguish! Madness! And Pain, right?

Edd.Dragon

Цитата: beep_boop від 24 Жовтень 2008, 16:39:05
А объявлять класс чрез структ - новая мода?
А чем это не структ? Все поля публичные, скрывать их и делать для них функции доступа в данной задаче ни к чему. Методов никаких для управления содержащимися данными нет. Есть только конструктор и деструктор, которые вовсе не анти-феншуйны в структах.

1. Использование класса (феншуйное) неоправдано.
2. По сути структ = класс и только чисто для приличия принято данные, полностью доступные и без методов оформляем в struct, с методами - в класс с сокрытием и методами доступа. Ну шобы не отходить от канонов.

βεερ_βooρ

Цитата: edd_k від 24 Жовтень 2008, 16:46:25
А чем это не структ?
Тем что есть конструктор и деструктор.
Цитата: edd_k від 24 Жовтень 2008, 16:46:25
Все поля публичные, скрывать их и делать для них функции доступа в данной задаче ни к чему. Методов никаких для управления содержащимися данными нет.
Ну чисто теоретически они должны могут быть ;)
Цитата: edd_k від 24 Жовтень 2008, 16:46:25
1. Использование класса (феншуйное) неоправдано.
Если не хочешь делать полноценный класс, то проще инициализацию и удаление списка просто вынести в отдельные ф-ции и все.
Цитата: edd_k від 24 Жовтень 2008, 16:46:25
2. По сути структ = класс и только чисто для приличия принято данные, полностью доступные и без методов оформляем в struct, с методами - в класс с сокрытием и методами доступа. Ну шобы не отходить от канонов.
Цитата: edd_k від 24 Жовтень 2008, 16:46:25
Есть только конструктор и деструктор, которые вовсе не анти-феншуйны в структах.
Как раз-то  анти-феншуйны. Это в С++ можно считать структуру классом. Но структора - это одно, а класс - другое. И называя структурой недоклассы читаймость кода ухудшается.
Fear is the path to the dark side. Fear leads to anger. Anger leads to hate. Hate leads to suffering.
All that's here is Fear! Suppression! Betrayal! Despair! Contempt! Regret! Sadness! Anguish! Madness! And Pain, right?

Edd.Dragon

Цитата: beep_boop від 24 Жовтень 2008, 16:54:56
Если не хочешь делать полноценный класс, то проще инициализацию и удаление списка просто вынести в отдельные ф-ции и все.
Да, можно конструктор и деструктор вынести в функции, в которых создается список и удаляются четные элементы.

Но если уж по уму, то нужен класс List, в котором эта структура будет голая и недоступная пользователю. Ну и всякие там методы... В итоге задача превратится в "Напишите свой List и продемонстрируйте работу на простеньком примере: <далее условие задачи>.  :D

ЦитатаИ называя структурой недоклассы читаймость кода ухудшается.
Да ладно, в современных редакторах кода конструктор с деструктором можно свернуть, чтобы не мозолили глаз. Да и обычно юзается только конструктор, чтобы стопки присваиваний полей структуры не писать всюду в коде - это попросту неудобно.


Haker

#include <iostream.h>
#include <string.h>

class GradeBook
{
public:
   void displayMessage (string courseName)
   {
     cout << "Welcome to the GradeBook for\n" << courseName << "!" << endl;
   }
};

int main ()
{
  string nameOfCourse;
  GradeBook myGradeBook;
  cout << "Please enter the course name:" << endl;
  getline (cin, nameOfCourse);
  cout << endl;

  myGradeBook.displayMessage (nameOfCourse);
  return 0;
}

              Ошибки

7: 'string' cannot start a parametr declaration
15: Undefined symbol 'string'
15: statement missing
18: function 'getline' should have protorype
18: undefined symbol 'nameCourse'
Снова привет! Снова ошибки, не разобратся :[.
Еще вписывал после директив <iostream.h>
                                 using std::cout;
                                 using std::cin;
                                 using std::endl;

                                 <string.h>
                                 using std::string;
                                 using std::getline;
Но у компилятора острое отвращение на std::, вообще кучу ошибок выдает. Подскажите в чем дело. Спасибо.



FalseMan

#295
1. у мя сомнения насчет возраста компилятора
2. using оставь а .h из <iostream.h> &<string.h> убери
[bohdan@home-br test]$ cat a.cpp
#include <iostream>
#include <string>
using std::cout;
using std::cin;
using std::endl;
using std::string;
using std::getline;

class GradeBook
{
public:
   void displayMessage (string courseName)
   {
     cout << "Welcome to the GradeBook for\n" << courseName << "!" << endl;
   }
};

int main ()
{
  string nameOfCourse;
  GradeBook myGradeBook;
  cout << "Please enter the course name:" << endl;
  getline (cin, nameOfCourse);
  cout << endl;

  myGradeBook.displayMessage (nameOfCourse);
  return 0;
}
[bohdan@home-br test]$ g++ -o a.o a.cpp
[bohdan@home-br test]$ ./a.o
Please enter the course name:
DPK - Haker

Welcome to the GradeBook for
DPK - Haker!
[bohdan@home-br test]$

Haker

ЯП Си++ 3.1. Есть какието поновее и где их скачать? Если это легально. Вижуал не интересует.

FalseMan

#297
Цитата: Haker від 26 Жовтень 2008, 18:18:46
ЯП Си++ 3.1. Есть какието поновее и где их скачать? Если это легально. Вижуал не интересует.
Винда?  Как вариант - MinGW, порт линуховых gcc/g++. Т. е. сначала ты пишешь программу в любом текстовом редакторе(под Виндой думаю привычнее и удобнее тебе будет Notepad++, но на вкус и цвет все фломастеры разные), а потом натравливаешь его из консоли примерно так:
gcc -o a.o a.cpp
и запускаешь а.о :)
Правда с ним придется немножко повозится при первоначальной настройке ну и выучить 2-3 консольные команды :)
Еще можно использовать Code::Blocks IDE , там MinGW идет сразу

Edd.Dragon

#298
Цитата: Haker від 26 Жовтень 2008, 16:30:11
Но у компилятора острое отвращение на std::, вообще кучу ошибок выдает. Подскажите в чем дело. Спасибо.
Ну так пойди в папку include и посмотри iostream.h. Там и в помине нет никаких неймспейсов, т.е. он действительно не в курсе, что такое std.

Теперь пойди в string.h - где-то там есть объявление типа string? Нету. А что там? Куча функций для работы со строками. Какими строками? Строками типа char* (кстати, string в нынешних реализациях - это по сути класс-менеджер (оболочка, контейнер) для char*. Просто раньге все писали его самостоятельно под свои нужды или каждый раз все писали в открытую, а с появлением шаблонов появилась возможность шаблон для динамических массивов (коим является char*) сделать стандартным.

Напиши в начале проги
typedef char* string;
и разом отпадет куча ошибок ))))))

Но это всего-лишь пример, показывающий, что именно непонятно компилятору, а не решение проблемы.

Чтобы решить проблему нужно прежде всего научиться пользоваться встроеной справкой. Становимся на string и жмем Ctrl+F1, переходим по найденной ссылке и что мы видим?

Есть только файл strng.h, в котором объявлен класс-контейнер String (с большой буквы).

Кстати, у себя в \include я такого файла не нашел (что-то там вообще маловато файлов, вроде больше было...). Да и судя по справке с ним почти ничего нельзя делать из того, что имеется в современной стандартной библиотеке шаблонов для класса-оболочки строк.


resiver

Здраствуйте все кто помогал кодить задание данное мною!Однако уважаемый edd_k был заинтрегован после того как увидел исходники от проги которую надо было написать, не думал что вы так заинтерисуетесь над написанием кода, БЛОГОДАРЕН ВАМ! ну после того как я начал компилить исходной код то у меня начали возникать вопросы.Так вот, вопросы:
1.после кмпиляции у меня появляеться только вот ета часть Usage:
                                                                                                          test <first_value> <last_value>
так как вы писали о результатах работы :
C:\>test.exe
Usage:
   test <first_value> <last_value>

C:\>test.exe 2 10
3
5
7
9
у меня такого нет.Может я что то не так делаю или не так понял?

2.Скажыте каким методом вы засыпали числа в список, уж явно не рандомомо, потому что не могу найти функцию randomв исходниках.
Подпись отображается внизу каждого Вашего сообщения. Вы также можете использовать BB код и смайлы.