Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

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

54K
08 января 2010 года
RomaJkaa
3 / / 08.01.2010
1. Минимальный по модулю элемент массива.
2. Сумму модулей элементов массива, расположенных после первого элемента, равного нулю.
Преобразовать массив таким образом, чтобы в первой его половине расположились элементы, стоящие в чётных позициях, а во второй половине – элементы стоявшие в нечётных позициях.

Собственно проблема в том что когда вводишь деситичные дроби программа берёт только целую часть как для вычисления суммы так и для нахождения минимального
например если вводить элементы : 3 5 3 0.5 3 5 0 8
программа выдаёт что 0.5 наименьший элемент
аналогично при сумме если после 0 например 7 3.4 сумма получается 10

Код:
#include <iostream.h>
#include <conio.h>
#include <math.h>
 
 
int main()
{
    clrscr();
    int n;
    cout<<"vvedite koli4estvo elementov";cin>>n;
 
    int i;
    int ineg;
 
    float sum;float *a=new float [n];
    int imin;
 
    cout<<"vvedite elementi=\n";
 
    int k=0;
    int m=n/2;
 
    for(i = 0; i < n; i++)cin>>a;
    for(i = 0; i < n; i++)cout<<a<<' ';
    for(i = 0; i < n; i++) if (a==0) ineg=i;
    for(sum=0,i=ineg+1;i<n;i++)    sum+=abs(a);
         if(int(ineg==0)) cout<<"net 0-vix eleventov";
     else
    cout<<endl<<"summa "<<sum;
 
 
    for( i=ineg=0;i<n;i++) {
    if(abs(a) < abs(a[imin]))   imin=i;}
    cout<<"\n\t i min="<<(a[imin]);
    cout<<endl ;
     
     float *b = new float[n];
 
  for(i=0;i<n;i++)
 
                {
                if(int(i)%2==0)
                {b[m]=a;m++;}
        else
                {b[k]=a;k++; }
                      }
          for(i=0;i<n;i++)
          {cout<<b<<" ";}
          cout<<endl;
         getch();
         return 0;
 
}
87
08 января 2010 года
Kogrom
2.7K / / 02.02.2008
Можно попробовать fabs вместо abs. Или <cmath> вместо <math.h>
842
09 января 2010 года
sigmov
301 / / 16.09.2008
Воспользуйтесь макросом вместо abs(x)

#define ABS(X) ((X)<0) ? (-X) : (X)
87
09 января 2010 года
Kogrom
2.7K / / 02.02.2008
Цитата: sigmov
Воспользуйтесь макросом вместо abs(x)



Действительно, зачем изучать особенности используемого языка? Лучше придумать свой язык.

54K
09 января 2010 года
RomaJkaa
3 / / 08.01.2010
Цитата: Kogrom
Можно попробовать fabs вместо abs. Или <cmath> вместо <math.h>



Спасибо огромное - помогло

55K
14 января 2010 года
Mihon82
7 / / 22.12.2009
Не хочу открывать новую тему, тем более что тема как раз подходит для меня...
Код:
using System;

public class Wurzel
{
    public static void Main()
    {
        Console.WriteLine("\n" + "Wir werden Formel ax^2+bx+c=0 berechnen: " + "\n\n" +
                                        "Geben Sie 'a', 'b' und 'c' ein: ");
        double a = Convert.ToDouble(Console.ReadLine());
        double b = Convert.ToDouble(Console.ReadLine());
        double c = Convert.ToDouble(Console.ReadLine());
        double diskrim = 0.0;

        DiskrimSuchen(a, b, c, diskrim);
        Console.WriteLine("\n" + "Diskriminant ist: " + diskrim + "\n");


        RecnenAufgabe(a, b, c, diskrim);
       

    }

    public static double DiskrimSuchen(double a, double b, double c, double diskrim)
    {
        diskrim = (b * b) - (4 * a * c);
        return diskrim;
    }

    public static void RecnenAufgabe(double a, double b, double c, double diskrim)
    {
        if (diskrim < 0)
        {
            Console.Write("Diskriminant < 0" + "\n" + "keine Loesung!" + "\n");
            return;
        }
        else
        {
            if (diskrim == 0.0)
            {
                double x = -(b) / 2 * a;
                Console.WriteLine("diskriminant = 0" + "\n" + "Es gibt nur 1 Loesung: " + "\n" + "x= " + x);

            }
            else
            {
                double wurzel = Convert.ToDouble(diskrim);
                wurzel = Math.Pow(diskrim, 1.0 / 2);
                Console.WriteLine("\n" + "diskriminant > 0: ");

                double xx = (-(b) - (wurzel)) / (2 * a);
                Console.WriteLine("\n" + "x1= " + xx);

                double xxx = (-(b) + (wurzel)) / (2 * a);
                Console.WriteLine("\n" + "x2= " + xxx);

                return;
            }
        }
    }

}


Комментарии на немецком, но это не важно. Почему-то у меня все равно ноль: вроде считает поначалу все верно, но как возвращается в Main() - ставит исходный ноль...
536
14 января 2010 года
alex-kniaz
382 / / 07.08.2008
в чём проблема и что должно делаться
55K
14 января 2010 года
Mihon82
7 / / 22.12.2009
Цитата: alex-kniaz
в чём проблема и что должно делаться



Привет. Объясню в чем суть программы. Нужно расчитать уравнение: ax^2+bx+c=0
Для этого я нахожу дескриминант по формуле (b * b) - (4 * a * c)... и он вроде находится, но как только возращается в Main() Дескриминант обнуляется снова, из-за того, что у меня стоит double diskrim = 0.0; а нужно чтобы он оставался, для того чтобы дальше все решалось корректно

7
14 января 2010 года
@pixo $oft
3.4K / / 20.09.2006
У вас же double diskrim = 0.0 ДО вызова функции расчёта дискриминанта,как же после её вызова он будет обнуляться?

Upd:ну да,конечно,у вас же локальная переменная!А в функции другая,хоть и с таким именем.Вас учили областям видимости?
Если нет,то прочитайте и передайте переменную по ссылке
55K
14 января 2010 года
Mihon82
7 / / 22.12.2009
Цитата: @pixo $oft
У вас же double diskrim = 0.0 ДО вызова функции расчёта дискриминанта,как же после её вызова он будет обнуляться?

Upd:ну да,конечно,у вас же локальная переменная!А в функции другая,хоть и с таким именем.Вас учили областям видимости?
Если нет,то прочитайте и передайте переменную по ссылке



если честно, впервые слышу об этом... читаю, но мало что понимаю :eek:

55K
14 января 2010 года
Mihon82
7 / / 22.12.2009
:) Все сделал... Спасибо!!! Добавил [COLOR="Navy"]ref[/COLOR]
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог