#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;
}
Не могу найти ошибку
2. Сумму модулей элементов массива, расположенных после первого элемента, равного нулю.
Преобразовать массив таким образом, чтобы в первой его половине расположились элементы, стоящие в чётных позициях, а во второй половине – элементы стоявшие в нечётных позициях.
Собственно проблема в том что когда вводишь деситичные дроби программа берёт только целую часть как для вычисления суммы так и для нахождения минимального
например если вводить элементы : 3 5 3 0.5 3 5 0 8
программа выдаёт что 0.5 наименьший элемент
аналогично при сумме если после 0 например 7 3.4 сумма получается 10
Код:
Можно попробовать fabs вместо abs. Или <cmath> вместо <math.h>
#define ABS(X) ((X)<0) ? (-X) : (X)
Цитата: sigmov
Воспользуйтесь макросом вместо abs(x)
Действительно, зачем изучать особенности используемого языка? Лучше придумать свой язык.
Цитата: Kogrom
Можно попробовать fabs вместо abs. Или <cmath> вместо <math.h>
Спасибо огромное - помогло
Код:
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;
}
}
}
}
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() - ставит исходный ноль...
в чём проблема и что должно делаться
Цитата: alex-kniaz
в чём проблема и что должно делаться
Привет. Объясню в чем суть программы. Нужно расчитать уравнение: ax^2+bx+c=0
Для этого я нахожу дескриминант по формуле (b * b) - (4 * a * c)... и он вроде находится, но как только возращается в Main() Дескриминант обнуляется снова, из-за того, что у меня стоит double diskrim = 0.0; а нужно чтобы он оставался, для того чтобы дальше все решалось корректно
Upd:ну да,конечно,у вас же локальная переменная!А в функции другая,хоть и с таким именем.Вас учили областям видимости?
Если нет,то прочитайте и передайте переменную по ссылке
Цитата: @pixo $oft
У вас же double diskrim = 0.0 ДО вызова функции расчёта дискриминанта,как же после её вызова он будет обнуляться?
Upd:ну да,конечно,у вас же локальная переменная!А в функции другая,хоть и с таким именем.Вас учили областям видимости?
Если нет,то прочитайте и передайте переменную по ссылке
Upd:ну да,конечно,у вас же локальная переменная!А в функции другая,хоть и с таким именем.Вас учили областям видимости?
Если нет,то прочитайте и передайте переменную по ссылке
если честно, впервые слышу об этом... читаю, но мало что понимаю :eek:
:) Все сделал... Спасибо!!! Добавил [COLOR="Navy"]ref[/COLOR]