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

Нули в конце массива - C++

Восстановить пароль Регистрация
 
Musik
 Аватар для Musik
0 / 0 / 0
Регистрация: 28.11.2009
Сообщений: 23
11.11.2010, 09:59     Нули в конце массива #1
Задание было заполнить массив случайными числами от -5 до 5.
А также вычислить максимальный елемент массива.
И сумму элементов , расположенных до последнего положительного элемента

(Еще сжать массив, удалив из него все элементы модуль которых находится в интервале от 2 до 5) - Сделано

А освободившееся в конце массива заполнить нулями - вот с этим проблема. Надеюсь что-нибудь подскажете.



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
#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
#include <iostream.h>
#include <math.h>
#define N 10
void main()
{
double A[N],max,b,p,z,n;
int j,i,S=0,Sn;
clrscr();
cout<<"Variant 5"<<endl;
cout<<endl;
cout<<"diapazon 2<x<5"<<endl;
cout<<endl;
randomize();
 for(i=0;i<N;i++)
  {
A[i]=random(10)-5;
 if(A[i]>max)
max=A[i];
cout<<A[i]i<<" ";
}
for (i=0;i<N;i++)
 {
if (A[i]>0)
z=i;
}
for(i=0;i<z;i++)
S+=A[i];
cout<<endl;
cout<<endl<<"index poslednego pologitel'nogo elementa -> "<<z<<endl;
cout<<endl;
cout<<"Maximal'noe chislo v massive -> "<<max<<endl;
cout<<endl;
cout<<"Summa elementov do poslednego pologitel'nogo="<<S;
cout<<endl;
cout<<endl;
cout<<endl;
 
for(i=0;i<N;i++)
{
if (( (fabs(A[i])) < 5) & ((fabs (A[i])>2)))
{
 
cout<<A[i]<<" ";
}}
 
getch();
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
11.11.2010, 09:59     Нули в конце массива
Посмотрите здесь:

C++ Найти, на сколько нулей оканчивается число N
Удалить из массива целых чисел все нули. Сформировать два новых массива. В первый переписать все элементы данного массива с четными номерами, во второ C++
C++ Нули в конце записи n!
C++ вместо отсортированного массива выводятся нули
C++ Отсортировать массив таким образом, чтобы все нули находились в начале, а единицы — в конце массива
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
dihlofos
Бродяга
 Аватар для dihlofos
302 / 256 / 17
Регистрация: 27.08.2010
Сообщений: 553
11.11.2010, 10:32     Нули в конце массива #2
Я б как-нибудь так сделал:
C++
1
2
3
4
5
6
7
8
9
10
for(i=0; i<N; ++i)
{
    if (fabs(A[i]) < 5 && fabs (A[i])>2)
    {
        for(j = i+1; j < N; ++j)
            A[j-1] = A[j];
        A[N-1] = 0;
        i--;
    }
}
Сразу и сдвиг и обнуление.
Musik
 Аватар для Musik
0 / 0 / 0
Регистрация: 28.11.2009
Сообщений: 23
11.11.2010, 13:25  [ТС]     Нули в конце массива #3
Не работает(

а тут просто из 10 чисел выбираются подходящие и пишутся в новый массив.

допустим подошло 3 числа - 7 мест остались пустыми - надо на эти места поставить нули

Добавлено через 8 минут
Препод сказал нужно посчитать сколько элементов неподходящих было удалено из первого массива и эту цифру использовать во 2м массиве. (сколько удалено символо - столько нулей в конце добавлено)

Добавлено через 15 минут
что только не выводится с твоим циклом)

Добавлено через 10 минут
up/////////
dihlofos
Бродяга
 Аватар для dihlofos
302 / 256 / 17
Регистрация: 27.08.2010
Сообщений: 553
11.11.2010, 13:46     Нули в конце массива #4
Musik, а что, препод такой принципиальный? Второй массив ему подавай) По-моему проще тогда уж кол-во подходящих посчитать, а остальные заменить нулём.
Вот что получилось, сразу говорю - изврат:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
j=0;
    for(i=0; i<N; ++i)
    {
         if (fabs(A[i]) >= 5 || fabs (A[i])<=2)
          {
            B[j]=A[i];
            ++j;
         }
    }
 
    for(i=j; i<N; ++i)
    {
        B[i]=0;
    }
Добавлено через 4 минуты
Вот если что, первый вариант, полностью:
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
#include <iostream>
#include <math.h>
using namespace std;
 
 
int main()
{
    const int N = 10;
    int i,j;
    int A[N]={1,2,3,3,3,4,4,8,9,10},B[N];
 
    for(i=0; i<N; ++i)
    {
       if (fabs(A[i]) < 5 && fabs (A[i])>2)
           {
        for(j = i+1; j < N; ++j)
            A[j-1] = A[j];
                A[N-1] = 0;
        i--;
       }
    }
 
    for(i=0; i<N; ++i)
    {
        cout<<A[i]<<" ";
    }
 
    cout<<endl;
    system("pause");
    return 0;
}
Напильнег
480 / 120 / 10
Регистрация: 30.09.2010
Сообщений: 473
11.11.2010, 16:17     Нули в конце массива #5
Цитата Сообщение от Musik Посмотреть сообщение
Препод сказал нужно посчитать сколько элементов неподходящих было удалено из первого массива и эту цифру использовать во 2м массиве.
Веселый у вас препод: то, что в одной программе используются средства вывода C и C++ он за быдлокодинг не считает, то, что random неправильно используется, что вообще уже ошибка - тоже. То, что при определении максимума max не инициализируется, а сумма элементов массива типа double считается в переменной типа int, не видит, а вот второй массив зачем-то требует, хотя в задани написано сжать исходный.

Ладно, вот тебе образец для подражания, сравнивай со своим и исправляй:
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
...
#include <iomanip.h>
...
 
...
 
  double A[N], max, S, S2;
  int i, j, z;
 
  ...
 
  randomize(); for (i=0; i<N; i++) A[i]=random(11)-5;
 
  cout << "A before:";
  for (i=0; i<N; i++) cout << " " << setw(2) << A[i];
  cout << endl;
  cout << endl;
 
  for (max=A[0], i=1; i<N; i++)
    if (A[i]>max) max=A[i];
 
  cout << "Maximal'noe chislo v massive: " << max << endl;
  cout << endl;
 
  for (S=0, S2=0, z=-1, i=0; i<N; i++)
    if (A[i]>0) {
      z=i; S+=S2; S2=A[i];
    }
    else {
      S2+=A[i];
    }
 
  cout << "Index poslednego pologitel'nogo elementa v A: ";
    (z>=0)?(cout << z):(cout << "net"); cout << endl;
  cout << endl;
  cout << "Summa elementov do poslednego pologitel'nogo: "
    << S << endl;
  cout << endl;
 
  for (j=0, i=0; i<N; i++)
    if (!((2<fabs(A[i])) && (fabs(A[i])<5)))
      A[j++]=A[i];
  for (i=j; i<N; i++)
    A[i]=0;
 
  cout << "A after: ";
  for (i=0; i<N; i++) cout << " " << setw(2) << A[i];
  cout << endl;
  cout << endl;
 
  ...
Можно было бы конечно и в один цикл почти все зафигачить, но боюсь твой препод не поймет...
Yandex
Объявления
11.11.2010, 16:17     Нули в конце массива
Ответ Создать тему
Опции темы

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