Форум программистов, компьютерный форум, киберфорум
C для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.60/5: Рейтинг темы: голосов - 5, средняя оценка - 4.60
0 / 0 / 0
Регистрация: 24.01.2014
Сообщений: 12
1

Одномерный массив. упорядочить его, убрав нули и сместив ненулевые элементы влево

10.03.2014, 23:40. Показов 869. Ответов 7
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#include <stdio.h>
int main()
{
int i,j,g,s;
int m[s];
printf("Enter number of symbols:\n %d",s);
s=getchar();
for (i=0;i<s;i++)
{printf("Enter ur mass:\n %d", m[i]);
m[i]=getchar();
}
for (j=0;j<s;j++)
{
if(m[j]=0)
{ for(g=j;g<s;g++)
{m[g]==m[g+1];
}
}}
putchar(m[s]);
}
Надеюсь на объяснения. Заранее спасибо!

Добавлено через 7 минут
Или заменить *getchar* на *scanf* ? Перебираю варианты и не могу не флудить, простите.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
10.03.2014, 23:40
Ответы с готовыми решениями:

Упорядочить массив, исключая все нули и сдвигая все ненулевые элементы влево
Дан одномерный массив.Упорядочить его, исключая все нули и сдвигая все ненулевые элементы влево.

Упорядочить массив, удалив нули со сдвигом влево ненулевых элементов
Дан одномерный массив. Упорядочить массив удалив нули со сдвигом влево ненулевых элементов

Упорядочить массив удалив нули со сдвигом влево ненулевых элементов
Нужно написать программу при помощи простейших и не замысловатых операторов. Дан одномерный...

Упорядочить массив, удалив нули со сдвигом влево ненулевых элементов
Дан одномерный массив. Упорядочить массив, удалив нули со сдвигом влево ненулевых элм.

7
99 / 81 / 93
Регистрация: 03.12.2013
Сообщений: 217
11.03.2014, 02:24 2
Может тебе такое подойдет)
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
#include <stdio.h>
#include <stdlib.h>
 
int main()
{
    int i,j,n,a=0;
    int *arr;
 
    printf("Enter number of symbols:\n");
    scanf("%d",&n);
 
    arr = (int*)malloc(n * sizeof(int));
 
    printf("Entering the array:\n");
    for(i = 0; i < n; i++)
    {
        scanf("%d",&arr[i]);
    }
 
    j = 0;
    for(i = 0; i < n; i++)
    {
        if (arr[i] != 0)
        {
            arr[j] = arr[i];
            j++;
            a++;
        }
    }
    
    printf("Out:\n");
    for(i = 0; i < a; i++)
        printf("%d ",arr[i]);
    printf("\n");
 
        free(arr);
 
    return 0;
}
И нельзя вот писать
C
1
int m[s]
,или s пропишы в дефайне ,или же через malloc(в си). Почиай об динамических массивах)Да и в использование getchar тоже толку не увидел,думаю лучше стандартным scanf в даном случае)
1
0 / 0 / 0
Регистрация: 24.01.2014
Сообщений: 12
12.03.2014, 00:14  [ТС] 3
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#include <stdio.h>
int main()
{
int i,j,g,s;
printf("Enter number of symbols:\n");
scanf("%d",&s);
int m[s];
for (i=0;i<s;i++)
{printf("Enter ur mass:\n");
scanf("%d",&m[i]);
}
for (j=0;j<s;j++)
{
if(m[j]=0)
{ for(g=j;g<s;g++)
{m[g]=m[g+1];
m[g+1]=0;
}
}}
printf("Massive:%d\n",m[s]);
}
я решил поправить немножко и вот что вышло.Код компилируется, но работает программа криво ><
0
1 / 1 / 0
Регистрация: 05.03.2014
Сообщений: 18
12.03.2014, 09:29 4
а переменные не нужно обнулять? Когда я учил, то нас всегда заставляли обнулять переменные...
1
3 / 3 / 3
Регистрация: 10.03.2014
Сообщений: 21
12.03.2014, 23:46 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
#include <stdio.h>
#include <conio.h>
#define n 100
void main()
{
    int s, k;
    int m[n];
 
    printf("\n Enter Number of Symbols: ");
    do
    scanf_s("%i", &s);
    while ((s <= 0) || (s > n));
    
    printf("\n Enter Your Mass: ");
    for (int i = 0; i < s; ++i)
        scanf_s("%i", &m[i]);
 
    for (int i = 0; i < s - 1; ++i)
    for (int j = 0; j < s - i; ++j)
    if (m[j] == 0) {
        k = m[j];
        m[j] = m[j + 1];
        m[j + 1] = k;
    }
 
    printf("\n Ordered Array: ");
    for (int i = 0; i < s; i++)
    if (m[i] > 0) printf("%i ", m[i]);
 
    printf("\n\n Press any key: ");
    _getch();
}
1
0 / 0 / 0
Регистрация: 24.01.2014
Сообщений: 12
13.03.2014, 09:10  [ТС] 6
C
1
2
3
4
5
6
for (int i = 0; i < s - 1; ++i)
    for (int j = 0; j < s - i; ++j)
    if (m[j] == 0) {
        k = m[j];
        m[j] = m[j + 1];
        m[j + 1] = k;
Не могу понять, зачем здесь используется цикл с "i" ? Ну и в цикле "j" ,как по мне, начальное условие должно быть "j=i", иначе нужные нам элементы будут "исчезать". Не так ли?
Ах, ещё в условии должно быть "m[i]=0" ?
0
3 / 3 / 3
Регистрация: 10.03.2014
Сообщений: 21
13.03.2014, 19:45 7
Цитата Сообщение от NoobieUserN Посмотреть сообщение
Не могу понять, зачем здесь используется цикл с "i" ? Ну и в цикле "j" ,как по мне, начальное условие должно быть "j=i", иначе нужные нам элементы будут "исчезать". Не так ли?
Ах, ещё в условии должно быть "m[i]=0" ?
Прочитай про обработку массива "пузырьком": я просто в этой сортировке поменял условие, на которое нам необходимо. Другими словами, эта программа сканирует введенный с клавиатуры массив и, если в массиве есть число "0", то цикл, так сказать, "перекинет" этот ноль в конец строки массива. А на выходе, соответственно, просто пишем нужное нам условие (доработал чуть-чуть, теперь с отрицательными тоже работает):
C
1
2
3
4
printf("\n Ordered Array: ");
    for (int i = 0; i < s; i++)
    if ((m[i] != 0) && (m[i] <= n) && (m[i] > -n)) 
        printf("%i ", m[i]);
Теперь ясней?
Миниатюры
Одномерный массив. упорядочить его, убрав нули и сместив ненулевые элементы влево  
0
3 / 3 / 3
Регистрация: 10.03.2014
Сообщений: 21
13.03.2014, 20:01 8
NoobieUserN, исправил почти весь код: теперь программа удаляет все вхождения чисел, равных 0. Если что не понятно, спрашивай.
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
#include <stdio.h>
#include <conio.h>
#define n 100
 
void main()
{
    int s, k;
    int m[n];
 
    printf("\n Enter Number of Symbols: ");
    do
    scanf_s("%i", &s);
    while ((s <= 0) || (s > n));
 
    printf("\n Enter Your Mass: ");
    for (int i = 0; i < s; ++i)
        scanf_s("%i", &m[i]);
 
    int i = 0;
    while (i < s)
    if (!m[i]) {
        for (int j = i; j <= s - 1; ++j)
            m[j] = m[j + 1];
        --s;
    }
    else
        ++i;
 
    printf("\n Ordered Array: ");
    for (i = 0; i < s; ++i)
        printf("%i ", m[i]);
 
    printf("\n\n Press any key: ");
    _getch();
}
Миниатюры
Одномерный массив. упорядочить его, убрав нули и сместив ненулевые элементы влево  
1
13.03.2014, 20:01
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
13.03.2014, 20:01
Помогаю со студенческими работами здесь

Дан одномерный массив. Расположить ненулевые элементы по убыванию
Дан одномерный массив. Расположить ненулевые элементы по убыванию. Использовать алгоритм вставки....

переписать в одномерный массив ненулевые элементы и найти наибольшее по модулю
Из матрицы В(4,4) переписать в одномерный массив С ненулевые элементы и найти наибольшее из них по...

Сформировать матрицы одномерный массив, в который поместить все ненулевые элементы
Дан двумерный массив А размерностью 7*7, элементы массива - случайные числа из диапазона ...

Дан одномерный массив. Переместить максимальные элементы в конец, сдвинув остальные элементы влево
Собственно сабж... &quot;Дан одномерный массив. Переместить максимальные элементы в конец, сдвинув...


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

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru