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

Не могу посчитать сумму между первым и последним отрицательным! - C++

Восстановить пароль Регистрация
 
Pikup_Master
0 / 0 / 0
Регистрация: 04.10.2012
Сообщений: 25
11.10.2012, 13:59     Не могу посчитать сумму между первым и последним отрицательным! #1
а также нужно переобразовать масив таким образом что бы сначала рассполагались елементы модуль которых не перевышает 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
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
#include <stdio.h>
#include <stdlib.h>
#include <iostream>
#include <cmath>
 
int main()
{
    const int n=10;
    double mas[n],Sum=0;
    int i,maxI=0,min;
 
    /* Читаем массив.*/
    for (i=0;i<n;i++) scanf("%lf",&mas[i]);
    /* Ищем индекс минимального. */
    min=1;
    for (i=0;i<n;i++)
        if (mas[min]>mas [i])
 
            min=i;
        
    printf("Number of min: %d\n",min);
 
    /* Находим сумму элементов между первым и вторым отрицальтельным елементом . */
    maxI=-1;
 
    int r, minr=1,z;
 
    for (i=0;i<n;i++) 
 
        if (mas[i]<0)
            
        {
            minr=i;
            break;
        }
        if (mas[i]>0)
                printf(" Netu minusovuh chisel ",i);
    
         
 
       for (r=10;r<maxI;r++) 
           if (mas[r]<0)
       {
        maxI=r;
        break;
    }  
          
       if (mas[r]>0)
                printf(" Netu minusovuh chisel ",r); 
 
   for(int z=minr+1; z<maxI; z++)
       Sum= Sum +mas[z];
   
 printf("Sum: " , Sum);
    return 0;
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
11.10.2012, 13:59     Не могу посчитать сумму между первым и последним отрицательным!
Посмотрите здесь:

C++ че не так считает сумму между первым и последним положительным элементом
Сумма элементов между первым положительным элементом массива и последним отрицательным C++
C++ Сумму элементов массива, расположенных между первым и последним отрицательными элементами
C++ Подсчитать сумму всех элементов стоящих между первым и вторым отрицательным числом массива
сумму элементов массива, расположенных между первым и последним отрицательными элементами C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Thinker
11.10.2012, 14:07
  #2

Не по теме:

что-то не идет вашему нику фраза: пожалуйста помогите !!!!

BumerangSP
 Аватар для BumerangSP
4283 / 1405 / 121
Регистрация: 16.12.2010
Сообщений: 2,941
Записей в блоге: 3
11.10.2012, 14:31     Не могу посчитать сумму между первым и последним отрицательным! #3
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
37
38
39
40
41
42
43
44
#include <stdio.h>
#include <stdlib.h>
#include <cmath>
 
int main()
{
const int n=5;
double a[n],s=0;
int i,l=-1,m=-1;
 
/* Читаем массив.*/
for (i=0;i<n;i++) 
 {
  scanf("%lf",&a[i]);
  if (a[i]<0) //определяем наличие двух отрицательных чисел
   {
    if (l<0) //запоминаем певрое
     l=i;
    else
     m=i; //запоминаем последнее
   }
 }
 if (m==-1) //если второго числа нет, значит и промежутка нет
   printf("Chisel <0 men`she 2\n\n");
 else  //иначе
  {
  for (i=l+1;i<m;i++) //считаем сумму в интервале
   s+=a[i];
  printf("Summ [%d;%d] = %5.3lf\n\n",l+1,m+1,s);
  }
 for (i=0;i<n;i++) 
  for (l=i;l<n;l++)  
   if (fabs(a[l])<=1) //переносим в начало все, по модулю <=1
    {
     s=a[i];
     a[i]=a[l];
     a[l]=s;
    }
 for (i=0;i<n;i++) 
  printf("%7.3lf",a[i]); //выводим на экран 
  getchar();
  getchar();  
return 0;
}
Добавлено через 52 секунды

Не по теме:

Thinker, там pikup вместо pickup, значит помощь все же нужна))

Thinker
11.10.2012, 14:53
  #4

Не по теме:

а я бы алгоритм линейной сложности написал для данной задачи, ну да ладно)

BumerangSP
 Аватар для BumerangSP
4283 / 1405 / 121
Регистрация: 16.12.2010
Сообщений: 2,941
Записей в блоге: 3
11.10.2012, 14:57     Не могу посчитать сумму между первым и последним отрицательным! #5
Thinker, я решил оставить совместимость с Си (там, правда math.h нужно написать). А что тут можно было бы изменить за исключением разве что удаления одного цикла (с совместимостью с Си)?
Thinker
Эксперт C++
 Аватар для Thinker
4215 / 2189 / 150
Регистрация: 26.08.2011
Сообщений: 3,802
Записей в блоге: 5
11.10.2012, 14:59     Не могу посчитать сумму между первым и последним отрицательным! #6
ну, здесь скорее в алгоритме изюминка, нежели в языке
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
void transform(int *a, int n)
{
   int i = 0, j = n - 1;
   while(i < j)
   {
      while(i < j && abs(a[i]) <= 1)
        i++;
      while(i < j && abs(a[j]) > 1)
        j--;
      if(i < j)
      {
         a[i] ^= a[j] ^= a[i] ^= a[j];
         i++;
         j--;
      }
   }
}
для действительных чисел аналогично, только менять значения через буфер
BumerangSP
 Аватар для BumerangSP
4283 / 1405 / 121
Регистрация: 16.12.2010
Сообщений: 2,941
Записей в блоге: 3
11.10.2012, 15:04     Не могу посчитать сумму между первым и последним отрицательным! #7
Thinker, функция с даблом не хочет работать(
Thinker
Эксперт C++
 Аватар для Thinker
4215 / 2189 / 150
Регистрация: 26.08.2011
Сообщений: 3,802
Записей в блоге: 5
11.10.2012, 15:08     Не могу посчитать сумму между первым и последним отрицательным! #8
должна работать)
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
void transform(double *a, int n)
{
   int i = 0, j = n - 1;
   double buf;
   while(i < j)
   {
      while(i < j && fabs(a[i]) <= 1)
        i++;
      while(i < j && fabs(a[j]) > 1)
        j--;
      if(i < j)
      {
         buf = a[i]; a[i] = a[j]; a[j] = buf;
         i++;
         j--;
      }
   }
}
BumerangSP
 Аватар для BumerangSP
4283 / 1405 / 121
Регистрация: 16.12.2010
Сообщений: 2,941
Записей в блоге: 3
11.10.2012, 15:13     Не могу посчитать сумму между первым и последним отрицательным! #9
Thinker, это, я так понял, только перекидывание |элементов|<=1 в начало. Не знаю с точки зрения производительности, но количество строк здесь явно больше
C++
1
2
3
4
5
6
7
8
for (i=0;i<n;i++) 
  for (l=i;l<n;l++)  
   if (fabs(a[l])<=1) 
    {
     s=a[i];
     a[i]=a[l];
     a[l]=s;
    }
В с/с++ вроде стандартная swap() еще есть, чтоб кода меньше было.
Thinker
Эксперт C++
 Аватар для Thinker
4215 / 2189 / 150
Регистрация: 26.08.2011
Сообщений: 3,802
Записей в блоге: 5
11.10.2012, 15:16     Не могу посчитать сумму между первым и последним отрицательным! #10
BumerangSP, не совсем, просто меняем элементы, стоящие не на своих местах, местами. Производительность, да Вы шутите, запустите оба алгоритма для (динамического) массива из 10 000 000 элементов. У вас алгоритм сложностью O(n^2), у моего O(n). производительность колосально разнится!!! В одном случае ждем менее секунды, в другом - несколько минут, если не часов.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
11.10.2012, 15:24     Не могу посчитать сумму между первым и последним отрицательным!
Еще ссылки по теме:

сумма элементов массива через один между первым отрицательным и последним положительным C++
Найти количество элементов массива, которые находится между первым и последним отрицательным элементом C++
Найти сумму элементов массива между первым и последним отрицательными элементами C++

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

Или воспользуйтесь поиском по форуму:
BumerangSP
11.10.2012, 15:24     Не могу посчитать сумму между первым и последним отрицательным!
  #11

Не по теме:

Thinker, да, конечно шучу
Я, в общем-то, и не пытался сравнивать "школьный" алгоритм, это ведь как словесный оборот такой)

Yandex
Объявления
11.10.2012, 15:24     Не могу посчитать сумму между первым и последним отрицательным!
Ответ Создать тему
Опции темы

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