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

Ошибка в коде - C++

Восстановить пароль Регистрация
 
AFi-
1 / 1 / 0
Регистрация: 16.05.2013
Сообщений: 22
24.09.2013, 17:19     Ошибка в коде #1
Дорогие программисты! Помогите пожалуйста юному прогеру понять в чем трабла )
сабж:

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
#include <iostream>
using namespace std;
unsigned long int Perimeter(unsigned short int length, width);
 
 
 
int main()
{
    int length;
    int width;
    int result;
    cout << "Vvedite dlinnu:  " << endl;
    cin >> length;
    length = Perimeter(length);
    cout << "Vvedite shirinu:  " << endl;
    cin >> width;
    width = Perimeter(width);
    cout << "Perimeter: " << result << endl;
    cin >> result;
    result = Perimeter(length, width);
 
}
 
unsigned long int Perimeter (unsigned short int length)
{
    return 2 * length;
}
 
unsigned long int Perimeter (unsigned short int width)
{
    return 2 * width;
}
unsigned long int Perimter (unsigned short int length, width)
{
    return length + width;
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
24.09.2013, 17:19     Ошибка в коде
Посмотрите здесь:

C++ Ошибка в коде
Ошибка в коде C++
Ошибка в коде C++
Ошибка в коде C++
Ошибка в коде C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
names1995
11 / 11 / 2
Регистрация: 13.11.2012
Сообщений: 276
24.09.2013, 17:25     Ошибка в коде #2
что должна делать программа?
AFi-
1 / 1 / 0
Регистрация: 16.05.2013
Сообщений: 22
24.09.2013, 17:31  [ТС]     Ошибка в коде #3
найти периметр прямоугольника
names1995
11 / 11 / 2
Регистрация: 13.11.2012
Сообщений: 276
24.09.2013, 17:37     Ошибка в коде #4
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
#include <iostream>
#include <cstdlib>
using namespace std;
int Perimeter(int length, int width);
int main()
{
int length;
int width;
int result;
cout << "Vvedite dlinnu: " << endl;
cin >> length;
cout << "Vvedite shirinu: " << endl;
cin >> width;
result = Perimeter(length, width);
cout << "Perimeter: " << result << endl; 
system ("PAUSE");
return 0;
}
 
 int Perimeter (int length, int width)
 {
      return 2*(length+width);
        
 }
если периметр прямоугольника
Rivory
146 / 112 / 2
Регистрация: 15.01.2013
Сообщений: 266
24.09.2013, 17:40     Ошибка в коде #5
В коде просто сквозит фундаментальное непонимание того, что пишется и зачем. Советую почитать какие-нибудь учебники для новичков.

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#include <iostream>
using namespace std;
double Perimeter(double length, double width);
 
 
 
int main()
{
double length;
double width;
double result;
cout << "Vvedite dlinnu: ";
cin >> length;
cout << "Vvedite shirinu: ";
cin >> width;
result = Perimeter(length, width);
cout << "Perimeter: " << result << endl;
}
double Perimter (double length, double width)
{
return 2*(length + width);
}
Пишу с телефона, поэтому текст неформатировал.
names1995
11 / 11 / 2
Регистрация: 13.11.2012
Сообщений: 276
24.09.2013, 17:41     Ошибка в коде #6
у него, отдельные функции на длину и ширину )))))))
AFi-
1 / 1 / 0
Регистрация: 16.05.2013
Сообщений: 22
24.09.2013, 17:42  [ТС]     Ошибка в коде #7
Ребят, как в условии задачи было сказано, чтобы функция возвращала значения unsigned long int, и параметры ее unsigned short int .. Так я и написал.. Да и учебник, который я читаю (C++ за 21 день Джесс Либерти третье издание) так разбирали все задачи

Но все равно спасибо большое за решение и критику
names1995
11 / 11 / 2
Регистрация: 13.11.2012
Сообщений: 276
24.09.2013, 17:44     Ошибка в коде #8
успехов тебе
Rivory
146 / 112 / 2
Регистрация: 15.01.2013
Сообщений: 266
24.09.2013, 17:49     Ошибка в коде #9
Цитата Сообщение от AFi- Посмотреть сообщение
Ребят: как в условии задачи было сказано, чтобы функция возвращала значения unsigned long int, и параметры ее unsigned short int .. Так я и написал.. Да и учебник, который я читаю (C++ за 21 день Джесс Либерти третье издание) так разбирали все задачи

Но все равно спасибо большое за решение и критику
Тут дело не в типах переменных. Я как домой доеду, минут через 20, смогу подробно расписать Ваши ошибки. С телефона я сдохну столько печатать.
AFi-
1 / 1 / 0
Регистрация: 16.05.2013
Сообщений: 22
24.09.2013, 17:49  [ТС]     Ошибка в коде #10
Rivory, Благодарю, жду с нетерпением)
VEINHORN
542 / 91 / 22
Регистрация: 16.12.2011
Сообщений: 317
24.09.2013, 17:55     Ошибка в коде #11
AFi-, у Вас в третьей строчке в прототипе функции не указан тип переменной, там где width. И в последнем методе также. Вам нужно изменить название функции. Либо та в которой аргумент width, либо та где аргумент height.
AFi-
1 / 1 / 0
Регистрация: 16.05.2013
Сообщений: 22
24.09.2013, 18:01  [ТС]     Ошибка в коде #12
Цитата Сообщение от MCKLAS Посмотреть сообщение
AFi-, у Вас в третьей строчке в прототипе функции не указан тип переменной, там где width. И в последнем методе также. Вам нужно изменить название функции. Либо та в которой аргумент width, либо та где аргумент height.
А это что? unsigned short int
VEINHORN
542 / 91 / 22
Регистрация: 16.12.2011
Сообщений: 317
24.09.2013, 18:03     Ошибка в коде #13
AFi-, вообще можно любой. Выбирать вам. А зачем вам 3 функции периметр, в которых неизвестно что делается. и зачем вы вводите с клавиатуры значение в переменную result, а потом присваиваете значение, возвращаемое функцией.?)
AFi-
1 / 1 / 0
Регистрация: 16.05.2013
Сообщений: 22
24.09.2013, 18:04  [ТС]     Ошибка в коде #14
MCKLAS, тип переменной указан ведь unsigned short int (к параметрам функции)
VEINHORN
542 / 91 / 22
Регистрация: 16.12.2011
Сообщений: 317
24.09.2013, 18:12     Ошибка в коде #15
В этой строчке у вас указан тип возвращаемого значения и тип для одной переменной : length.
C++
1
unsigned long int Perimeter(unsigned short int length, width);
А нужно для каждой указывать, например так:
C++
1
unsigned long int Perimeter(unsigned short int length,unsigned short int width);
Вот исправленная версия.

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#include <iostream>
using namespace std;
unsigned long int Perimeter(unsigned short int length,unsigned short int width);
 
int main()
{
    int length = 0, width = 0, result =0;
    cout << "Vvedite dlinnu:  " << endl;
    cin >> length;
    cout << "Vvedite shirinu:  " << endl;
    cin >> width;
    result = Perimeter(length, width);
    cout << "Result:" << result << endl;
    system("pause");
}
 
unsigned long int Perimeter (unsigned short int length, unsigned short int width)
{
    return 2 * width + 2 * length;
}
Или же вы можете не писать прототип функции, а писать реализацию выше функции main:

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;
 
unsigned long int Perimeter (unsigned short int length, unsigned short int width)
{
    return 2 * width + 2 * length;
}
 
int main()
{
    int length = 0, width = 0, result =0;
    cout << "Vvedite dlinnu:  " << endl;
    cin >> length;
    cout << "Vvedite shirinu:  " << endl;
    cin >> width;
    result = Perimeter(length, width);
    cout << "Result:" << result << endl;
    system("pause");
}
AFi-
1 / 1 / 0
Регистрация: 16.05.2013
Сообщений: 22
24.09.2013, 18:16  [ТС]     Ошибка в коде #16
MCKLAS, ааа.. я понял, спасибо огромное!!
Rivory
146 / 112 / 2
Регистрация: 15.01.2013
Сообщений: 266
24.09.2013, 19:03     Ошибка в коде #17
Давайте разберем построчно, что у вас написано.
C++
1
#include <iostream>
Тут подключается iostream - заголовочный файл с функциями ввода-вывода.
C++
1
using namespace std;
Тут мы говорим, что мы будем работать в пространстве имен std, чтобы потом не писать std:: перед каждой операцией ввода-вывода.
C++
1
unsigned long int Perimeter(unsigned short int length, width);
Объявление функции. Тут мы говорим, что будем использовать данную функцию, поэтому компилятор будет искать её реализацию позднее и не будет ругаться, если мы попытаемся использовать данную функцию до описания её реализации. Тут же встречается первая ошибка. В списке аргументов не указан тип второго аргумента. Правильный вариант уже написал человек выше:
C++
1
unsigned long int Perimeter(unsigned short int length, unsigned short int width);
C++
1
int main()
Начало реализации главной функции. Точки входа в программу, с которой она начнет работать. Правилом хорошего тона считается писать не просто int main(), а
C++
1
int main(int argc, char* argv[])
, где argc - количество параметров, переданных в программу, а argv - сами эти параметры. Это делается для того, чтобы потом можно было эти параметры использовать в самой программе.

C++
1
2
    cout << "Vvedite dlinnu:  " << endl;
    cin >> length;
Тут мы записываем в переменную length то, что введем в терминале. Кстати, endl тут не нужен, т.к. endl это перевод строки, но при вводе переменной с терминала, пользователь, в любом случае нажмет Enter, что переведет строку и так, без endl
C++
1
    length = Perimeter(length);
Это вторая ошибка. Про саму функцию Perimeter я напишу позднее. Но, представим, что есть такая функция. Что тогда делает эта строка? Она записывает в переменную length значение, которое возвращает функция. Зачем? Если мы только что ввели этот length с клавиатуры.
C++
1
2
3
    cout << "Vvedite shirinu:  " << endl;
    cin >> width;
    width = Perimeter(width);
Аналогично
C++
1
    cout << "Perimeter: " << result << endl;
Ещё одна серьезная ошибка. Тут Вы пытаетесь использовать переменную result. Но что хранится в этой переменной? До этого вы её нигде не использовали, не присвоили никакого значения, просто объявили как int result. Таким образом, на данный момент в ней хранится случайный порядок битов, кусок мусора, выхваченный из памяти.
C++
1
    cin >> result;
Ещё одна ошибка. Тут Вы пытаетесь заставить пользователя ввести результат. Откуда он знает результат? Если он его уже знает, зачем тогда нужна программа?
C++
1
    result = Perimeter(length, width);
Вот это правильная строка. Вызов функции периметр и запись возвращаемого значения в переменную result.

C++
1
2
3
4
5
6
7
8
9
unsigned long int Perimeter (unsigned short int length)
{
    return 2 * length;
}
 
unsigned long int Perimeter (unsigned short int width)
{
    return 2 * width;
}
Что делают эти 2 функции - непонятно. Непонятно в том числе, зачем они нужны? Если мы знаем формулу периметра, почему мы сразу не можем её записать? Более того, функции
C++
1
unsigned long int Perimeter (unsigned short int width)
и
C++
1
unsigned long int Perimeter (unsigned short int length)
для компилятора - вообще не имеют различия. Для него они абсолютно одинаковы, он будет в них путаться и будет ругаться на них.
C++
1
2
3
4
unsigned long int Perimter (unsigned short int length, width)
{
    return length + width;
}
Ну тут надо просто вписать правильную формулу периметра прямоугольника (length+width)*2
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
24.09.2013, 19:19     Ошибка в коде
Еще ссылки по теме:

Ошибка в коде C++
Ошибка в коде C++
Ошибка в коде C++

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

Или воспользуйтесь поиском по форуму:
AFi-
1 / 1 / 0
Регистрация: 16.05.2013
Сообщений: 22
24.09.2013, 19:19  [ТС]     Ошибка в коде #18
Rivory, большое спасибо за разъяснение!!
Yandex
Объявления
24.09.2013, 19:19     Ошибка в коде
Ответ Создать тему
Опции темы

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