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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> [C++] Неправильно работает программа, Необходимо найти ошибку в коде 
V
    Опции темы
lrad
  Дата 20.1.2007, 23:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Помогите найти ошибку

Код

#include<iostream.h>
#include<iomanip.h>
#include<conio.h>
//Прототипы функций
void inputmas(float[15],char);
float raschet(float [15]);
void printrez(float [15],char);

   void main()
   {
    cout <<"Задача № 1  \n";
    cout <<"Даны вещественные массивы А[15]F[15] \n";
    cout <<"Для каждого массива определить наибольшее \n";
    cout <<"из отрицательных значений" << endl;
    cout<<"\nДля вывода результатов вам нужно самостоятельно заполнить массив!\n";

   // Объявление массива и переменных
   float a[15],f[15];
   // Обращение
   inputmas(a,'a'); // в функцию в качестве аргумента
   inputmas(f,'f'); // передается массив и его имя
                       // вызов функции, возращающей 1 значение

   printrez(a,'a');
   printrez(f,'f');
   cout<<"Нажмите любую клавишу...";
   getch();

   return;
   }

// Определение функции ввода массива inputmas()

   void inputmas(float x[15],char name)
   {

    cout <<"Вводим массив  " << name << endl;
  int i;
  for ( i=0;i<15;i++)
  {
  cout <<"Введите элемент массива  " << name <<"["<<i<<"]=";
  cin >>x[i];
  }
  }
// Определение расчетной функции raschet()
float raschet(float m[15])
{
float max=0;

for (int i=0;i<15;i++)
if (m[i]>max && m[i] <0)
max=m[i];

return max;
}

 //     //Вывод массива и результата

void printrez(float x[15],char name)
{
cout<<"Исходный массив "<<name<<":"<<endl;
for (int i=0;i<15;i++)
cout<<setw(5)<<x[i];

float res=raschet(x);
if(res!=0)
cout<<endl<<"Наибольшее отрицательное значение в массиве "<<name<<" равно " <<raschet(x)<< endl;
else
cout<<endl<<"Отрицательных значений нет";
}

PM MAIL ICQ   Вверх
nworm
Дата 21.1.2007, 00:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

Репутация: 1
Всего: 8



Пробуй пошаговую отладку F7, F8, F4.

Хорошо ещё написать, что выдаёт компилятор. А то не очень хочетсся 70 строк смотреть из-за какойни-будь запятой.
PM MAIL WWW   Вверх
zkv
Дата 21.1.2007, 00:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата



****


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

Репутация: 26
Всего: 92



Код

float raschet(float m[15])
{
float max=0;
for (int i=0;i<15;i++)
if (m[i]>max && m[i] <0)
max=m[i];
return max;
}

Цитата(lrad @  20.1.2007,  23:59 Найти цитируемый пост)
    cout <<"Для каждого массива определить наибольшее \n";
    cout <<"из отрицательных значений" << endl;

float max=0; - max теперь больше любого отрицательного значения, естественно в массиве ничего не находится так как условие  (m[i]>max && m[i] <0) никогда не выполнится, в следующий раз пиши, что именно не получается

Это сообщение отредактировал(а) zkv - 21.1.2007, 00:07
PM MAIL   Вверх
PoloS
Дата 21.1.2007, 00:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 89
Регистрация: 29.12.2006
Где: МО, г. Одинцово

Репутация: 1
Всего: 5



Код

max = 0;


ты ищешь нибольшее из отрицательных, и как 1 значение берешь заведомо большее число.

надо так
Код

max = m[0];
for (inti i = 1; i < 15; i++)...
...
...

PM MAIL ICQ   Вверх
lrad
Дата 21.1.2007, 00:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Программа эта под dos
Она компилируется и компонуется нормально!!!
Результат работы самой программы неправильный
Тоесть ответ выдает неправильный
PM MAIL ICQ   Вверх
PoloS
Дата 21.1.2007, 00:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 89
Регистрация: 29.12.2006
Где: МО, г. Одинцово

Репутация: 1
Всего: 5



Цитата(zkv @ 21.1.2007,  00:06)
float max=0; - max теперь больше любого отрицательного значения, естественно в массиве ничего не находится так как условие  (m[i]>max && m[i] <0) никогда не выполнится, в следующий раз пиши, что именно не получается

в одну секунду с тобой ответили  smile  smile  smile 

 smile 
PM MAIL ICQ   Вверх
lrad
Дата 21.1.2007, 00:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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




Пробовал и так
а где гарантия что 1 элемент будет отрицательным?
Код


#include<iostream.h>
#include<iomanip.h>
#include<conio.h>
//Прототипы функций
void inputmas(float[15],char);
int raschet(float [15]);
void printrez(float [15],char);

   void main()
   {
    cout <<"Задача № 1  \n";
    cout <<"Даны вещественные массивы А[15]F[15] \n";
    cout <<"Для каждого массива определить наибольшее \n";
    cout <<"из отрицательных значений" << endl;
    cout<<"\nДля вывода результатов вам нужно самостоятельно заполнить массив!\n";

   // Объявление массива и переменных
   float a[15],f[15];
   // Обращение
   inputmas(a,'a'); // в функцию в качестве аргумента
   inputmas(f,'f'); // передается массив и его имя
   // вызов функции, возращающей 1 значение

   printrez(a,'a');
   printrez(f,'f');
   cout<<"Нажмите любую клавишу...";
   getch();

   return;
   }

// Определение функции ввода массива inputmas()

   void inputmas(float x[15],char name)
   {

    cout <<"Вводим массив  " << name << endl;
  int i;
  for ( i=0;i<15;i++)
  {
  cout <<"Введите элемент массива  " << name <<"["<<i<<"]=";
  cin >>x[i];
  }
  }
// Определение расчетной функции raschet()
 int raschet(float m[15])
  {
      int i,max;
      max=m[0];

    for (i=0;i<15;i++)
    if (m[i] >max&& m[i] <0)
    max=m[i];

 return max;

  }

 //     //Вывод массива и результата

 void printrez(float x[15],char name)
 {

 cout<<"Исходный массив  "<<name<<":"<<endl;
 for (int i=0;i<15;i++)
 cout<<setw(5)<<x[i];
 cout<<endl<<"Наибольшее отрицательное значение в массиве  "<<name<<" равно " <<raschet(x)<< endl;


 }



PM MAIL ICQ   Вверх
PoloS
Дата 21.1.2007, 00:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 89
Регистрация: 29.12.2006
Где: МО, г. Одинцово

Репутация: 1
Всего: 5



точно! тогда те нужно завести флаг 
1)first = false; 
2)нашел отрицательный
3) смотришь first == false, если да то max = этому числу и first = true;
иначе сравниваешь с max и максимальное заносишь в max

Добавлено @ 00:13 
Код

// Определение расчетной функции raschet()
 int raschet(float m[15])
  {
      int i,max;
bool f = false;
    for (i=0;i<15;i++)
    if (m[i] < 0)
   {
    if (f == false) max = m[i], f = true;
    else 
         {if (max < m[i]) max = m[i];}
   }
 return max;
  }


Это сообщение отредактировал(а) PoloS - 21.1.2007, 00:14
PM MAIL ICQ   Вверх
zkv
Дата 21.1.2007, 00:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата



****


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

Репутация: 26
Всего: 92



Цитата(lrad @  21.1.2007,  00:09 Найти цитируемый пост)
а где гарантия что 1 элемент будет отрицательным?

конечно нет гарантий, так что теперь писать заведомо неработающие варианты, можно например в каждой итерации проверять max == 0 и если равно и текущий элемент отрицательный, то писать его значение в max
PM MAIL   Вверх
lrad
Дата 21.1.2007, 00:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Цитата



Код

// Определение расчетной функции raschet()
 int raschet(float m[15])
  {
      int i,max;
bool f = false;
    for (i=0;i<15;i++)
    if (m[i] < 0)
   {
    if (f == false) max = m[i], f = true;
    else 
         {if (max < m[i]) max = m[i];}
   }
 return max;
  }



Это не то
надо более простое решение
P.S. слишком заумно для студента 1 курса smile 
PM MAIL ICQ   Вверх
PoloS
Дата 21.1.2007, 00:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 89
Регистрация: 29.12.2006
Где: МО, г. Одинцово

Репутация: 1
Всего: 5



Цитата(lrad @ 21.1.2007,  00:23)

Это не то
надо более простое решение
P.S. слишком заумно для студента 1 курса smile

я сам первокурсник  smile  и ничего замутного тут не вижу... можешь сделать как zkv предложил, смысл такой же и доп. переменную не надо вводить:
Код

// Определение расчетной функции raschet()
 int raschet(float m[15])
  {
      int i,max = 0;
    for (i=0;i<15;i++)
    if (m[i] < 0)
   {
    if (max) 
         if (max < m[i]) max = m[i];
    else 
         {max = m[i];}
   }
 return max;
  }


тока при воводе рез-та, рассматривай случай, когда функция возвращает 0. Это значит отриц. чисел нет


Это сообщение отредактировал(а) PoloS - 21.1.2007, 00:29
PM MAIL ICQ   Вверх
zkv
Дата 21.1.2007, 00:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата



****


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

Репутация: 26
Всего: 92



PoloS, 
Цитата(PoloS @  21.1.2007,  00:26 Найти цитируемый пост)
тока при воводе рез-та, рассматривай случай, когда функция возвращает 0

а у вас кстати функция в таком случае работать будет некорректно:
Цитата(PoloS @  21.1.2007,  00:11 Найти цитируемый пост)
int raschet(float m[15])
  {
      int i,max;
bool f = false;
    for (i=0;i<15;i++)
    if (m[i] < 0)
   {
    if (f == false) max = m[i], f = true;
    else 
         {if (max < m[i]) max = m[i];}
   }
 return max; //если не встретится отрицательных чисел, то в max - мусор
  }


PM MAIL   Вверх
PoloS
Дата 21.1.2007, 00:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 89
Регистрация: 29.12.2006
Где: МО, г. Одинцово

Репутация: 1
Всего: 5



Цитата(zkv @ 21.1.2007,  00:34)
PoloS, 
Цитата(PoloS @  21.1.2007,  00:26 Найти цитируемый пост)
тока при воводе рез-та, рассматривай случай, когда функция возвращает 0

а у вас кстати функция в таком случае работать будет некорректно:
Цитата(PoloS @  21.1.2007,  00:11 Найти цитируемый пост)
int raschet(float m[15])
  {
      int i,max;
bool f = false;
    for (i=0;i<15;i++)
    if (m[i] < 0)
   {
    if (f == false) max = m[i], f = true;
    else 
         {if (max < m[i]) max = m[i];}
   }
 return max; //если не встретится отрицательных чисел, то в max - мусор
  }

согласен, накатал на скорую руку, и тока потом понял что мусор в max и в результате невозможно определить нашелся рез-т или нет...
PM MAIL ICQ   Вверх
Rockie
Дата 21.1.2007, 00:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1143
Регистрация: 23.4.2006

Репутация: 8
Всего: 31



lrad, здесь
Код

float max=0;
 тебе нужно указывать не ноль и не первый эл-т, а первый найденный отрицательный элемент. Вот тебе ссылка в тему:

позиция первого максимума среди отрицательных чисел, стр. 2

p.s.: первая страница была куда забавнее smile

Добавлено @ 00:42 
все-таки первая. решения аналогичной задачи на второй =)




--------------------
Чтобы иметь большой гардероб - надо иметь большой гардероб.
PM   Вверх
lrad
Дата 21.1.2007, 00:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Rockie, Спасибо!
теперь то я уже разберусь smile 
PM MAIL ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
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.0556 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


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

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