Форум программистов, компьютерный форум CyberForum.ru

Есть общая структура программы, как правильно (написать)определить функции к ней? - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 9, средняя оценка - 4.78
USHЁL
 Аватар для USHЁL
0 / 0 / 0
Регистрация: 15.11.2009
Сообщений: 93
13.06.2010, 17:15     Есть общая структура программы, как правильно (написать)определить функции к ней? #1
Здравствуйте!
Задача из книги Стивена Прата 2ой день ни как не могу справится,помогите плз.Кто в курсе,проходил или знает как,подскажите пожалуйста
Ниже представлен код и условие задания:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
#include <cstdlib>
#include <iostream>
using namespace std;
#include <cstring> //dlya vizova funczii strlen(),strcpy()
struct stringy
{
char * str; //ukazivaet na stroku
int ct; //dlinna stroki(ne schitaya simvola '\0')
};
 
using namespace std;
 
int main()
{
stringy beany;
char testing[] = "Realnost'-ne to,chto nam viditsya.";
set(beany, testing); //pervim argumentom yavlaetsya ssilka,
//videlyaet prostranstvo dlya hranenia kopii
//[COLOR="Pink"]testing[/COLOR], ispolzuet element tipa [COLOR="Pink"]str[/COLOR]
// strukturi [COLOR="Pink"]beany[/COLOR] kak ukazatel na noviy
//blok, kopiruet [COLOR="Pink"]testing[/COLOR] v noviy blok i
//sozdaet element [COLOR="Pink"]ct[/COLOR] struktury [COLOR="Pink"]beany[/COLOR]
show(beany);//pechataet element strokovogo tipa odin raz
show(beany,2);//pechataet element strokovogo tipa dvajdi
testing[0] = 'D';
testing[1] = 'u';
show(testing);//pechataet stroku testing 1in raz
show(testing,3);//pechataet troku testing 3 raza
show("Gotovo!");
return 0;
}
Завершите написание программы,создав соответствующие функции и прототипы.Обратите внимание,что в программе должны быть 2 функции show(), и каждая из них использует аргументы ,заданные по умолчанию.
Используйте спецификатор const при объявлении аргументов там, где это оправдано.Обратите также внимание на то,что функция set() должна использовать операцию new для выделения достаточного пространства памяти под хранение заданной строки.Используемые здесь методы аналогичны методам,применяемым при задании и реализации классов.(Возможно,вам придётся изменить имена файлов заголовков и удалить директиву using, что зависит от используемого компилятора.)



я попробовал решить но неполучается правильно определить функцию set(),возможно есть ещё ошибки:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
#include <cstdlib>
#include <iostream>
#include <cstring>
struct stringy
{
   char * str;
   int ct;
};
const stringy & set(stringy & b,char tes);
void show(const stringy be,int n = 0);
void show(const char tes,int n = 0);
 
using namespace std;
 
int main(int argc, char *argv[])
{
  stringy beany;
  char testing[] = "Realnost'-ne to,chto nam viditsya.";
  set(beany,testing);
  show(beany);
  show(beany,2);
  testing[0] = 'D';
  testing[1] = 'u';
  show(testing);
  show(testing,3);
  show("Gotovo!");
  system("PAUSE");
  return EXIT_SUCCESS;
}
const stringy & set(stringy & b,char tes) 
 {
   b.str = new char[strlen(tes)+1];
   strcpy(b.str,tes);
   return b
   //delete b.str;
  }
void show(const stringy be,int n = 0)
  {
    if (n==0) then
     cout<<be.str;
     if n>0 then 
      for(int i=0;i<n;i++)
         cout<<be.str<<endl;
  }
void show(const char tes,int n = 0)
  { 
    int count = 0;
    if (n==0) then
      cout<<tes[i]<<endl;
    if (n>0) then 
      while(n > count)
       {
           cout<<tes[i]<<endl;
           count++;
        }
 
  }
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
13.06.2010, 17:15     Есть общая структура программы, как правильно (написать)определить функции к ней?
Посмотрите здесь:

Определить длину строки. Проверить, есть ли в ней слово “one”. C++
Как правильно написать в функции main() конструктор? C++
«Структура в структуре» - как правильно называется? C++
общая структура функции на С++ C++
Есть ли смысл помечать функции как inline, если их прототип уже есть в .h файле? C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
NNN777
299 / 157 / 19
Регистрация: 27.02.2010
Сообщений: 317
15.06.2010, 12:26     Есть общая структура программы, как правильно (написать)определить функции к ней? #2
Это вы имели ввиду?
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
#include <stdlib.h>
#include <iostream>
#include <string.h>
struct stringy
{
   char * str;
   int ct;
};
const stringy & set(stringy & b,char tes);
void set (stringy &, char []);
void show(const stringy be, int n=1);
void show( char tes[],int n=1);
 
using namespace std;
 
int main(int argc, char *argv[])
{
  stringy beany;
  char testing[] = "Realnost'-ne to,chto nam viditsya.";
  set(beany,testing);
  show(beany);
  show(beany,2);
  testing[0] = 'D';
  testing[1] = 'u';
  show(testing);
  show(testing,3);
  show("Gotovo!");
  system("PAUSE");
  return EXIT_SUCCESS;
}
void set(stringy & b,char tes[]) 
 {
   b.str = new char[strlen(tes)+1];
   strcpy(b.str,tes);
  }
void show(const stringy be, int n)
{
    int i;
    for (i=0; i<n; i++)
    {
        cout<<be.str;
        cout<<endl;
    }
    cout<<endl;
 }
void show( char tes[],int n)
{ 
    int count = 0, i=0, j;
    for (i=0; i<n; i++)
    {
        for (j=0; j<strlen(tes); j++)
            cout<<tes[j];
        cout<<endl;
    }
    cout<<endl; 
}
USHЁL
 Аватар для USHЁL
0 / 0 / 0
Регистрация: 15.11.2009
Сообщений: 93
17.06.2010, 02:09  [ТС]     Есть общая структура программы, как правильно (написать)определить функции к ней? #3
Вы меня избавили от головной боли!=)Спасибо вам
Я думал,что функция Set должна возвращать ссылку на объект stringy,но оказалось что это просто функция не возвращающая ни чего
Простите!А можно у Вас поинтересоватся на счёт того,что операция NEW должна ведь работать в паре с DELETE, но в программе delete не используется.Разве такое возможно?Ведь память должна быть возвращена обратно в кучу.
accept
4837 / 3236 / 165
Регистрация: 10.12.2008
Сообщений: 10,682
17.06.2010, 03:05     Есть общая структура программы, как правильно (написать)определить функции к ней? #4
C++
1
show(beany);
мало аргументов
USHЁL
 Аватар для USHЁL
0 / 0 / 0
Регистрация: 15.11.2009
Сообщений: 93
17.06.2010, 03:13  [ТС]     Есть общая структура программы, как правильно (написать)определить функции к ней? #5
Цитата Сообщение от accept Посмотреть сообщение
C++
1
show(beany);
мало аргументов
В задании так уже составлено было. Я просто думал,что не void фнкция должна быть.
Кстати,мне тут мысль пришла!Ведь new выделяет память во время работы функции,тогда получается так,что она же(функция) её и освобождает без применения delete. Все переменные и выделенная память освобождается,или с кучей всё по другому происходит?(нужно применить delete)
accept
4837 / 3236 / 165
Регистрация: 10.12.2008
Сообщений: 10,682
17.06.2010, 03:51     Есть общая структура программы, как правильно (написать)определить функции к ней? #6
C++
1
2
3
#include <stdlib.h>
#include <iostream>
#include <string.h>
заголовки должны быть одного вида

так
C++
1
2
3
#include <stdlib.h>
#include <iostream.h>
#include <string.h>
или так
C++
1
2
3
#include <iostream>
#include <cstdlib>
#include <cstring>
Добавлено через 39 секунд
у тебя до delete ещё не дошла очередь
для всех new нужны delete'ы

Добавлено через 6 минут
аргумент по-умолчанию
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
 
#include <iostream>
 
using namespace std;
 
int f(int n = 1);
 
int main(void)
{
    
    f();
    
    return 0;
}
 
int f(int n)
{
    cout << 'x' << n << endl;
}
в определении должен отсутствовать

Добавлено через 6 минут
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
void show(const stringy be, int n = 1);
 
...
 
void show(const stringy be, int n)
{
    /* if (n==0) then
     cout<<be.str;
     if n>0 then  */ // можно убрать, кстати, что за then ?
 
    for (int i = 0; i < n; i++)
        cout << be.str << endl;
}
Добавлено через 47 секунд
ты можешь и не void сделать, если нужно не void
USHЁL
 Аватар для USHЁL
0 / 0 / 0
Регистрация: 15.11.2009
Сообщений: 93
17.06.2010, 12:57  [ТС]     Есть общая структура программы, как правильно (написать)определить функции к ней? #7
Да then ни к месту.=) С Дельфи что то я решил его совместить
NNN777
299 / 157 / 19
Регистрация: 27.02.2010
Сообщений: 317
17.06.2010, 13:27     Есть общая структура программы, как правильно (написать)определить функции к ней? #8
Цитата Сообщение от USHЁL Посмотреть сообщение
Я думал,что функция Set должна возвращать ссылку на объект stringy,но оказалось что это просто функция не возвращающая ни чего
Если вы в функцию передаете аргумент по ссылке, то не надо возвращать измененное значение, так как будет меняться именно этот параметр, т.к. он передается по ссылке... Это можно использовать, когда надо вернуть из функции больше чем одно знчение - можно передать аргументы по ссылке и они напрямую будут изменены в функции...
По поводу delete, вы правы, надо обязательно освободить память, но в main, т.к если вы в set удалите память, то ее потом в main'e вы не сможете использовать (распечатать). Освободите ее при завершении
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
int main(int argc, char *argv[])
{
  stringy beany;
  char testing[] = "Realnost'-ne to,chto nam viditsya.";
  set(beany,testing);
  show(beany);
  show(beany,2);
  testing[0] = 'D';
  testing[1] = 'u';
  show(testing);
  show(testing,3);
  show("Gotovo!");
  system("PAUSE");
  delete [] beany.str;
  return EXIT_SUCCESS;
}
USHЁL
 Аватар для USHЁL
0 / 0 / 0
Регистрация: 15.11.2009
Сообщений: 93
21.06.2010, 17:24  [ТС]     Есть общая структура программы, как правильно (написать)определить функции к ней? #9
Не много с запозданием спросил. Очень занят был.
У меня такой вот вопрос:Можно ли заменить код вашей функции:

Цитата Сообщение от NNN777 Посмотреть сообщение
C++
1
2
3
4
5
6
7
8
9
10
11
void show( char tes[],int n)
{ 
 int count = 0, i=0, j;
for (i=0; i<n; i++)
{
 for (j=0; j<strlen(tes); j++)
 cout<<tes[j];
 cout<<endl;
}
cout<<endl; 
}
на вот этот:

C++
1
2
3
4
5
6
7
8
9
void show(const char tes[],int n)
{ 
        for (int i=0; i<n; i++)
        {
                cout<<tes;
                cout<<endl;
        }
        cout<<endl; 
}
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
22.06.2010, 08:59     Есть общая структура программы, как правильно (написать)определить функции к ней?
Еще ссылки по теме:

Дана строка. Определить, сколько в ней символов *, ;, : [Есть код на Pascal] C++
C++ Не могу написать программу правильно .Вычислить и вывести на экран значения функции F
C++ Как правильно вписать функцию в h-файл и правильно её отразить в основной функции?

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
NNN777
299 / 157 / 19
Регистрация: 27.02.2010
Сообщений: 317
22.06.2010, 08:59     Есть общая структура программы, как правильно (написать)определить функции к ней? #10
Цитата Сообщение от USHЁL Посмотреть сообщение
Не много с запозданием спросил. Очень занят был.
У меня такой вот вопрос:Можно ли заменить код вашей функции:



на вот этот:

void show(const char tes[],int n)
{
for (int i=0; i<n; i++)
{
cout<<tes;
cout<<endl;
}
cout<<endl;
}
Да, можно)
Yandex
Объявления
22.06.2010, 08:59     Есть общая структура программы, как правильно (написать)определить функции к ней?
Ответ Создать тему
Опции темы

Текущее время: 05:51. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru