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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Помогите отловить ошибки в программе, простенький код. 
:(
    Опции темы
Wowa
Дата 10.11.2004, 14:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
Group Icon


Профиль
Группа: Админ
Сообщений: 15017
Регистрация: 14.9.2000
Где: Винград

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



Помогите отловить ошибки smile
Код

#include"iostream.h"
 
int main ()
{
int km;
int ps;
 
cout << "\nGeben Sie bitte Kilometer ein:";
cin >> km;
cout << "\nGeben Sie bitte PS ein:";
cin >> ps;
     
if (eingabe_pruefen (km, ps)) {
 cout << "\nPreis:";
 cout << preis_berechnen(km, ps) << endl;

} else {cout << "\nFehler!"; return 1;};

return 0;
}


// Wir pruefen die Eingabe
boolean eingabe_pruefen (int km, int ps)
{
if ( (km>=0) and (ps>=0) ) {return true;} else {return false;};
}

// Wir berechnen Preis
int preis_berechnen (int km, int ps)
{
int preis;
if (ps < 399) {
if (km < 20000 ) {return 75000;}
  elseif ( (km > 20000) und (km < 59999) ) {return 55000;}
  else {return 45000;};


} else {
if (km < 15000 ) {return 185000;}
  elseif ( (km >= 15000) und (km <= 29999) ) {return 140000;}
  else {return 100000;};

}
     
 
}
 

PM WWW   Вверх
_hunter
Дата 10.11.2004, 14:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 8564
Регистрация: 24.6.2003
Где: Europe::Ukraine:: Kiev

Репутация: 16
Всего: 98



первое, что в глаза бросается:
Код

// Wir pruefen die Eingabe
bool eingabe_pruefen (int km, int ps)
{
   if ( (km>=0) && (ps>=0) ) {return true;} else {return false;};
}

// Wir berechnen Preis
int preis_berechnen (int km, int ps)
{
   int preis;
   if (ps < 399) {
       if (km < 20000 ) {return 75000;}
   else if ( (km > 20000) && (km < 59999) ) {return 55000;}
       else {return 45000;};
   
   
} else {
   if (km < 15000 ) {return 185000;}
  else if ( (km >= 15000) && (km <= 29999) ) {return 140000;}
   else {return 100000;};  
   
}   }

хотя может так и можно...
а в чем хоть проблемы?

Это сообщение отредактировал(а) _hunter - 10.11.2004, 14:56


--------------------
Tempora mutantur, et nos mutamur in illis...
PM ICQ   Вверх
bel_nikita
Дата 10.11.2004, 15:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Эксперт
Сообщений: 2304
Регистрация: 12.10.2003
Где: Поезд №21/22 ( ст . Прага )

Репутация: 21
Всего: 47



Код

#include"iostream.h"

boolean eingabe_pruefen (int km, int ps); // <<<
int preis_berechnen (int km, int ps); // <<<

int main ()
{
 int km;
 int ps;
 
 cout << "\nGeben Sie bitte Kilometer ein:";
 cin >> km;
 cout << "\nGeben Sie bitte PS ein:";
 cin >> ps;
   
 if (eingabe_pruefen (km, ps)) {
  cout << "\nPreis:";
  cout << preis_berechnen(km, ps) << endl;

 } else {cout << "\nFehler!"; return 1;};

 return 0;
}


// Wir pruefen die Eingabe
boolean eingabe_pruefen (int km, int ps)
{
 return ( km && ps ) ? true : false;
}

// Wir berechnen Preis
int preis_berechnen (int km, int ps)
{
 if ( ps < 399 )
 {
   if (km < 20000 ) return 75000;
   else if ( km > 20000 && km < 59999 ) return 55000;

   return 45000;
 }

 if ( km < 15000 ) return 185000;
 else if ( km >= 15000 && km <= 29999 ) return 140000;

 return 100000;
}


Это сообщение отредактировал(а) bel_nikita - 10.11.2004, 15:26


--------------------
user posted image — регистрация доменов от 150 руб.
PM MAIL WWW ICQ   Вверх
Wowa
Дата 10.11.2004, 15:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
Group Icon


Профиль
Группа: Админ
Сообщений: 15017
Регистрация: 14.9.2000
Где: Винград

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



Ок. согласен с поправками. Теперь программа имеет такой код:

Код

/*
Programm fur Gebrauchtwagenhaendler
*/
#include"iostream.h"
 
int main ()
{
int km;
int ps;
 
cout << "\nGeben Sie bitte Kilometer ein:";
cin >> km;
cout << "\nGeben Sie bitte PS ein:";
cin >> ps;
     
if (eingabe_pruefen (km, ps)) {
 cout << "\nPreis:";
 cout << preis_berechnen(km, ps) << endl;

} else {cout << "\nFehler!"; return 1;};

return 0;
}


// Wir pruefen die Eingabe
bool eingabe_pruefen (int km, int ps)
{
  if ( (km>=0) && (ps>=0) ) {return true;} else {return false;};
}

// Wir berechnen Preis
int preis_berechnen (int km, int ps)
{
  int preis;
  if (ps < 399) {
      if (km < 20000 ) {return 75000;}
  else if ( (km > 20000) && (km < 59999) ) {return 55000;}
      else {return 45000;};
 
 
} else {
  if (km < 15000 ) {return 185000;}
 else if ( (km >= 15000) && (km <= 29999) ) {return 140000;}
  else {return 100000;};  
 
}  


}
 


А вот такие замечания выдает компиллер: Нужно довести программу до такого вида, что ни одного замечания не было.

Код

In file included from /usr/include/c++/3.2.2/backward/iostream.h:31,
                from aufgabe3.cpp:4:
/usr/include/c++/3.2.2/backward/backward_warning.h:32:2: warning: #warning This file includes at least one deprecated or antiquated header. Please consider using one of the 32 headers found in section 17.4.1.2 of the C++ standard. Examples include substituting the <X> header for the <X.h> header for C++ includes, or <sstream> instead of the deprecated header <strstream.h>. To disable this warning use -Wno-deprecated.
aufgabe3.cpp: In function `int main()':
aufgabe3.cpp:16: `eingabe_pruefen' undeclared (first use this function)
aufgabe3.cpp:16: (Each undeclared identifier is reported only once for each
  function it appears in.)
aufgabe3.cpp:18: `preis_berechnen' undeclared (first use this function)
aufgabe3.cpp: In function `bool eingabe_pruefen(int, int)':
aufgabe3.cpp:28: `bool eingabe_pruefen(int, int)' used prior to declaration
aufgabe3.cpp: In function `int preis_berechnen(int, int)':
aufgabe3.cpp:34: `int preis_berechnen(int, int)' used prior to declaration
aufgabe3.cpp:35: warning: unused variable `int preis'


PM WWW   Вверх
bel_nikita
Дата 10.11.2004, 15:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Эксперт
Сообщений: 2304
Регистрация: 12.10.2003
Где: Поезд №21/22 ( ст . Прага )

Репутация: 21
Всего: 47



Admin
неа

Код

#include"iostream.h"

boolean eingabe_pruefen (int km, int ps); // <<<
int preis_berechnen (int km, int ps); // <<<

// потом main
...




--------------------
user posted image — регистрация доменов от 150 руб.
PM MAIL WWW ICQ   Вверх
Adil'
Дата 10.11.2004, 15:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

Репутация: 6
Всего: 15



второе, что бросается в глаз - далеко не все компиляторы поддерживают использование функций без прототипа, описание которых находится после вызова.
третье - далеко не все компиляторые знают, что такое true и false (впрчем как и bool/boolean)
четвертое - далеко не вовсех компиляторах числа, больше чем 0x7fff уложатся в int
пятое - зачем нужна int preis; в preis_berechnen?
шестое - где так учат исходный код выравнивать?
седьмое...


--------------------
Удачи
PM MAIL WWW   Вверх
Wowa
Дата 10.11.2004, 15:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
Group Icon


Профиль
Группа: Админ
Сообщений: 15017
Регистрация: 14.9.2000
Где: Винград

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



bel_nikita
Здорово!
Только оказывается нужно действительно вместо boolean указывать bool.

Согласно всем исправлениям, последний вариант кода такой:

Код

/*
Programm fur Gebrauchtwagenhaendler
*/
#include"iostream.h"

bool eingabe_pruefen (int km, int ps); // <<<
int preis_berechnen (int km, int ps); // <<<

int main ()
{
int km;
int ps;

cout << "\nGeben Sie bitte Kilometer ein:";
cin >> km;
cout << "\nGeben Sie bitte PS ein:";
cin >> ps;
   
if (eingabe_pruefen (km, ps)) {
 cout << "\nPreis:";
 cout << preis_berechnen(km, ps) << endl;

} else {cout << "\nFehler!"; return 1;};

return 0;
}


// Wir pruefen die Eingabe
bool eingabe_pruefen (int km, int ps)
{
return ( km>=0 && ps>=0 ) ? true : false;
}

// Wir berechnen Preis
int preis_berechnen (int km, int ps)
{
if ( ps < 399 )
{
  if (km < 20000 ) return 75000;
  else if ( km > 20000 && km < 59999 ) return 55000;

  return 45000;
}

if ( km < 15000 ) return 185000;
else if ( km >= 15000 && km <= 29999 ) return 140000;

return 100000;
}



Теперь ругается только так:
Код

In file included from /usr/include/c++/3.2.2/backward/iostream.h:31,
                from aufgabe3.cpp:4:
/usr/include/c++/3.2.2/backward/backward_warning.h:32:2: warning: #warning This file includes at least one deprecated or antiquated header. Please consider using one of the 32 headers found in section 17.4.1.2 of the C++ standard. Examples include substituting the <X> header for the <X.h> header for C++ includes, or <sstream> instead of the deprecated header <strstream.h>. To disable this warning use -Wno-deprecated.


Добавлено @ 15:32
Цитата
шестое - где так учат исходный код выравнивать?

имхо, кому, как удобнее. Что бы ты предложил улучшить?

PM WWW   Вверх
Adil'
Дата 10.11.2004, 15:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

Репутация: 6
Всего: 15



Admin, компилятор предупреждает, что лучше использовать <iostream>, а не <iostream.h>


--------------------
Удачи
PM MAIL WWW   Вверх
Wowa
Дата 10.11.2004, 15:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
Group Icon


Профиль
Группа: Админ
Сообщений: 15017
Регистрация: 14.9.2000
Где: Винград

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



Так, это побороли. Все-таки остались этим замечания еще:

Код

aufgabe3.cpp: In function `int main()':                                         aufgabe3.cpp:14: `cout' undeclared (first use this function)                    aufgabe3.cpp:14: (Each undeclared identifier is reported only once for each        function it appears in.)                                                     aufgabe3.cpp:15: `cin' undeclared (first use this function)
aufgabe3.cpp:21: `endl' undeclared (first use this function)


PM WWW   Вверх
bel_nikita
Дата 10.11.2004, 15:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Эксперт
Сообщений: 2304
Регистрация: 12.10.2003
Где: Поезд №21/22 ( ст . Прага )

Репутация: 21
Всего: 47



#include "iostream.h" -> #include <iostream>



--------------------
user posted image — регистрация доменов от 150 руб.
PM MAIL WWW ICQ   Вверх
Mad
Дата 10.11.2004, 15:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Эксперт
Сообщений: 656
Регистрация: 18.10.2004
Где: Одесса

Репутация: 7
Всего: 19



Admin
замени <iostrem.h> на <iostream>



--------------------
user posted image
PM MAIL   Вверх
Adil'
Дата 10.11.2004, 15:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

Репутация: 6
Всего: 15



Цитата(Admin @ 10.11.2004, 15:28)
Что бы ты предложил улучшить?
В последнем варианте уже поправлено, разве что даже если у if один оператор, всеравно лучше его не писАть в одну строку с эти if/ Да и если if заканчивается return'ом - ответный else - бессмысленнен:
Код
int preis_berechnen (int km, int ps)
{
 if ( ps < 399 )
 {
   if (km < 20000 )
     return 75000;
   if ( km > 20000 && km < 59999 )
     return 55000;
   return 45000;
 }
 if ( km < 15000 )
   return 185000;
 if ( km >= 15000 && km <= 29999 )
   return 140000;
 return 100000;
}


З.Ы. а что хоть за компилятор?




--------------------
Удачи
PM MAIL WWW   Вверх
Mad
Дата 10.11.2004, 15:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Эксперт
Сообщений: 656
Регистрация: 18.10.2004
Где: Одесса

Репутация: 7
Всего: 19



Admin
после include добавь
Код

using namespace std;



--------------------
user posted image
PM MAIL   Вверх
Wowa
Дата 10.11.2004, 15:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
Group Icon


Профиль
Группа: Админ
Сообщений: 15017
Регистрация: 14.9.2000
Где: Винград

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



Компилятор: g++ (GCC) 3.2.2
Добавлено @ 15:48
Цитата
разве что даже если у if один оператор, всеравно лучше его не писАть в одну строку с эти if/ Да и если if заканчивается return'ом - ответный else - бессмысленнен:


Если после if идет один оператор, то имхо, если он написан в одной строке с if - это повышает читаемость кода и делает код не таким огромным smile Порой по листингу ходить не очень удобно, когда одна функция кучу места занимает.

Насчет else - согласен. Можно и без него было бы обойтись, но не мешает.
Добавлено @ 15:49
Цитата(Mad @ 10.11.2004, 13:41)
using namespace std;

Добавил. Ругаться перестал. Что это дает?
Добавлено @ 15:51
В общем, компиляция прошла успешно теперь и без замечани! smile Однако, все, что у меня теперь есть, это файл a.out с выводом программы, что не совсем корректно для меня. Т.к. программа должна запрашивать ввод с клавиатуры, а не запрашивает.
PM WWW   Вверх
Adil'
Дата 10.11.2004, 16:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

Репутация: 6
Всего: 15



Цитата(Admin @ 10.11.2004, 15:44)
Добавил. Ругаться перестал. Что это дает?
да просто в этом <iostream> сout и cin объявлены в окружении _STD_BEGIN .... _STD_END, которые в <yvals.h> описаны как
Код
 #define _STD_BEGIN namespace std {
 #define _STD_END  };
. Т.е. по сути сin и cout это std::cin и std::cout, а using namespace std; позволяет не писАть каждый раз это std:: перед cin и cout.


Добавлено @ 16:10
Цитата(Admin @ 10.11.2004, 15:44)
Однако, все, что у меня теперь есть, это файл a.out с выводом программы, что не совсем корректно для меня. Т.к. программа должна запрашивать ввод с клавиатуры, а не запрашивает.
Черт его знает, это gcc - в vc - всё нормально. Нигде стандартный ввод/ввыод не переопределил?





--------------------
Удачи
PM MAIL WWW   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

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

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


 




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


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

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