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

Сортировка отрицательных чисел нечетных строк

08.01.2010, 16:31. Показов 2802. Ответов 28
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Я никак не могу понять, как провести сортировку по возрастанию отрицательных чисел в нечетных строках матрицы методом пузырька.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
08.01.2010, 16:31
Ответы с готовыми решениями:

Отсортировать по сумме нечетных и отрицательных элементов строк матрицы по возрастанию
есть код #include <windows.h> #include <iostream> #include <cstdlib> #include <ctime>...

Найти минимальное из нечетных отрицательных чисел
Написать программу , которая выводит 4 целых числа a,b,c,d(положительных и отрицательных) и находит...

Сортировка четных строк матрицы по возрастанию, а нечетных - по убыванию
Здравствуйте! Есть задача: отсортировать чётные строки массива А по возрастанию, а нечётные по...

Найти количество нечетных отрицательных чисел в списке
Помогите сделать из такого кода структуру данных в виде однонаправленного списка #include...

28
Эксперт С++
4727 / 2548 / 757
Регистрация: 18.08.2009
Сообщений: 4,568
08.01.2010, 16:55 2
Давайте подумаем вместе. Сначало предлагаю подумать над тем как сделать сортировку в одной строке. Вот представьте есть одна строка, в ней есть и положительные и отрицательные элементы. Пока код никакой писать не надо, просто представьте что перед Вами лежат листки бумаги с написаными числами. Опишите, как бы Вы их сортировали?
1
0 / 0 / 0
Регистрация: 08.01.2010
Сообщений: 13
08.01.2010, 17:13  [ТС] 3
последовательно слева-направо сравнивал соседние числа,если правое меньше левого-менял бы местами.и так n-1 раз.n-количество листков
0
Эксперт С++
4727 / 2548 / 757
Регистрация: 18.08.2009
Сообщений: 4,568
08.01.2010, 17:42 4
Цитата Сообщение от Stuzzy Посмотреть сообщение
последовательно слева-направо сравнивал соседние числа,если правое меньше левого-менял бы местами.и так n-1 раз.n-количество листков
Добавлю только, что делал бы это с чилами которые меньше 0. Правильно.
А сможете, пока не обращая внимание на то какое число (отрицательное или положительное) написать сортировку в одной строке?
1
25 / 25 / 3
Регистрация: 27.12.2009
Сообщений: 82
08.01.2010, 17:48 5
Дополняешь к этому два условия: нечетную строку и отрицательный элемент. придется тебе каждую итерацию искать те же отрицательные элементы и количество итераций будет равно количеству элементов в строке-1. Да, много лишнего. Можешь еще формировать одномерный массив и сортировать его, затем вставлять элементы отсортированного массива на место отрицательных элементов- два раза придется искать отриц.элементы

Добавлено через 2 минуты
Может, я не права Я б так делала
1
0 / 0 / 0
Регистрация: 08.01.2010
Сообщений: 13
08.01.2010, 18:01  [ТС] 6
для строки:

for (k=0, k<n-1; k++)
{
for (i=0; i<n-1-k; i++)
{
if (d[i]>d[i+1])
{
x=d[i];
d[i]=d[i+1];
d[i+1]=x;
}
}
}
к-количество проходов,n-размер массива
вроде бы так?
0
25 / 25 / 3
Регистрация: 27.12.2009
Сообщений: 82
08.01.2010, 18:57 7
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
k=0;
for (i=0;i<n;i+=2)
   for(j=0;j<n;j++)
{
{
  if (a[i][j]<0)
  d[k]=a[i][j];
  k++;
}
for (p=0; p<k; p++)
if (d[p]>d[p+1])
{
x=d[p];
d[p]=d[p+1];
d[p+1]=x;
}
for(j=0;j<n;j++)
for (p=0; p<k; p++)
 if (a[i][j]<0)
{
a[i][j]=d[p];
}
}
Добавлено через 30 минут
C++
1
2
3
4
5
6
7
8
9
10
for(b=0;b<k-1;b++)
{
for (p=0; p<k; p++)
if (d[p]>d[p+1])
{
x=d[p];
d[p]=d[p+1];
d[p+1]=x;
}
}
Еще же один цикл нужен , я забыла, много переменных получается. Ну одну стоку вставить надо
1
0 / 0 / 0
Регистрация: 08.01.2010
Сообщений: 13
08.01.2010, 19:49  [ТС] 8
то,что Вы добавили позже, надо добавить после:
if (a[i][j]<0)
d[k]=a[i][j];
k++;
}
так?
0
25 / 25 / 3
Регистрация: 27.12.2009
Сообщений: 82
08.01.2010, 19:53 9
да
1
0 / 0 / 0
Регистрация: 08.01.2010
Сообщений: 13
08.01.2010, 20:43  [ТС] 10
спасибо

Добавлено через 44 минуты
блин.не получается у меня вставить элемент во всё задание.
оно было вот таким:
Дан целый массив максимальной размерности 20*20. Провести сортировку по возрастанию отрицательных чисел в нечетных строках. Ввод исходного массива организовать из файла, при вводе учесть возможность ввода массива меньшей размерности.
Результаты работы программы вывести на экран и в файл.

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
#include <stdio.h>
#include <conio.h>
void main()
{
    FILE *fw,*fr;
    double a[20][20];
    int i,j,razmer;
    fw=fopen("log.txt","w");
    do
    {
        printf("vvedite razmer matrici (maximum 20):\n");
        scanf("%d",&razmer);
    }
    while (razmer>20 || razmer<1);
    printf("\n");
    fr=fopen("input.txt","r");
    for (i=0; i<razmer; i++)
    {
        for (j=0; j<razmer; j++)
        {
            fscanf (fr, "%lf", &a[i][j]);
        }
    }
    fclose(fr);
    printf ("\n Matrix: \n");
    fprintf (fw,"Matrix: \n");
    for(i=0; i<razmer; i++)
    {
        for (j=0; j<razmer; j++)
        {
            printf("%10.2lf", a[i][j]);
            fprintf(fw, "%10.2lf" , a[i][j]);
        }
        printf("\n");
        fprintf(fw, "\n");
    }
    // вот здесь сортировка должна быть
   
    printf ("\n Rezultat: \n");
    fprintf (fw,"Rezultat: \n");
    for(i=0; i<razmer; i++)
    {
        for (j=0; j<razmer; j++)
        {
            printf("%10.2lf", a[i][j]);
            fprintf(fw, "%10.2lf" , a[i][j]);
        }
        printf("\n");
        fprintf(fw, "\n");
    }
    getch();
}
0
25 / 25 / 3
Регистрация: 27.12.2009
Сообщений: 82
08.01.2010, 20:50 11
Что именно не получается?
1
0 / 0 / 0
Регистрация: 08.01.2010
Сообщений: 13
08.01.2010, 20:56  [ТС] 12
вставляю этот элемент
до этого естественно в переменные вписываю новые
там дофига ошибок,в том числе почти в каждой "subscripts on non-array" со строки где d[k]=a[i][j]; и до строки где d[p+1]=x;
0
25 / 25 / 3
Регистрация: 27.12.2009
Сообщений: 82
08.01.2010, 20:59 13
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
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
#include <stdio.h>
#include <conio.h>
void main()
{
    FILE *fw,*fr;
    double a[20][20],x,d[20];
    int i,j,razmer,k=0,p;;
    fw=fopen("log.txt","w");
    do
    {
        printf("vvedite razmer matrici (maximum 20):\n");
        scanf("%d",&razmer);
    }
    while (razmer>20 || razmer<1);
    printf("\n");
    fr=fopen("input.txt","r");
    for (i=0; i<razmer; i++)
    {
        for (j=0; j<razmer; j++)
        {
            fscanf (fr, "%lf", &a[i][j]);
        }
    }
    fclose(fr);
    printf ("\n Matrix: \n");
    fprintf (fw,"Matrix: \n");
    for(i=0; i<razmer; i++)
    {
        for (j=0; j<razmer; j++)
        {
            printf("%10.2lf", a[i][j]);
            fprintf(fw, "%10.2lf" , a[i][j]);
        }
        printf("\n");
        fprintf(fw, "\n");
    }
    // вот здесь сортировка должна быть
    
 
 
for (i=0;i<razmer;i+=2)
   for(j=0;j<razmer;j++)
{
{
  if (a[i][j]<0)
  d[k]=a[i][j];
  k++;
}
for (p=0; p<k; p++)
if (d[p]>d[p+1])
{
x=d[p];
d[p]=d[p+1];
d[p+1]=x;
}
for(j=0;j<razmer;j++)
for (p=0; p<k; p++)
 if (a[i][j]<0)
{
a[i][j]=d[p];
}
}
    printf ("\n Rezultat: \n");
    fprintf (fw,"Rezultat: \n");
    for(i=0; i<razmer; i++)
    {
        for (j=0; j<razmer; j++)
        {
            printf("%10.2lf", a[i][j]);
            fprintf(fw, "%10.2lf" , a[i][j]);
        }
        printf("\n");
        fprintf(fw, "\n");
    }
    getch();
}
Добавлено через 1 минуту
Я на С++ пишу, ты переделывай, если че не так.

Добавлено через 1 минуту
non array- я думаю, ты не объявил его как массив
1
0 / 0 / 0
Регистрация: 08.01.2010
Сообщений: 13
08.01.2010, 21:06  [ТС] 14
ошибок нет
только не хочет он его сортировать))
вот например забил массив и че получилось:
Matrix:
-2.00 -4.00 -6.00 5.00 -3.00
3.00 -7.00 9.00 -6.00 2.00
1.00 0.00 -5.00 9.00 -9.00
0.00 -3.00 2.00 -1.00 6.00
-7.00 3.00 5.00 2.00 -1.00
Rezultat:
-2.00 -2.00 -2.00 5.00 -2.00
3.00 -7.00 9.00 -6.00 2.00
1.00 0.00 0.00 9.00 0.00
0.00 -3.00 2.00 -1.00 6.00
0.00 3.00 5.00 2.00 0.00
0
25 / 25 / 3
Регистрация: 27.12.2009
Сообщений: 82
08.01.2010, 21:14 15
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
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
#include <stdio.h>
#include <conio.h>
void main()
{
    FILE *fw,*fr;
    double a[20][20],x,d[20];
    int i,j,razmer,k=0,p=0,b;;
    fw=fopen("log.txt","w");
    do
    {
        printf("vvedite razmer matrici (maximum 20):\n");
        scanf("%d",&razmer);
    }
    while (razmer>20 || razmer<1);
    printf("\n");
    fr=fopen("input.txt","r");
    for (i=0; i<razmer; i++)
    {
        for (j=0; j<razmer; j++)
        {
            fscanf (fr, "%lf", &a[i][j]);
        }
    }
    fclose(fr);
    printf ("\n Matrix: \n");
    fprintf (fw,"Matrix: \n");
    for(i=0; i<razmer; i++)
    {
        for (j=0; j<razmer; j++)
        {
            printf("%10.2lf", a[i][j]);
            fprintf(fw, "%10.2lf" , a[i][j]);
        }
        printf("\n");
        fprintf(fw, "\n");
    }
    // вот здесь сортировка должна быть
        
 
 
for (i=0;i<razmer;i+=2)
   for(j=0;j<razmer;j++)
{
{
  if (a[i][j]<0)
  d[k]=a[i][j];
  k++;
}
for(b=0;b<k-1;b++)
{
for (p=0; p<k; p++)
if (d[p]>d[p+1])
{
x=d[p];
d[p]=d[p+1];
d[p+1]=x;
}
}
p=0;
for(j=0;j<razmer;j++)
 if (a[i][j]<0)
{a[i][j]=d[p]
p++;
}
}
    printf ("\n Rezultat: \n");
    fprintf (fw,"Rezultat: \n");
    for(i=0; i<razmer; i++)
    {
        for (j=0; j<razmer; j++)
        {
            printf("%10.2lf", a[i][j]);
            fprintf(fw, "%10.2lf" , a[i][j]);
        }
        printf("\n");
        fprintf(fw, "\n");
    }
    getch();
}
1
0 / 0 / 0
Регистрация: 08.01.2010
Сообщений: 13
08.01.2010, 21:21  [ТС] 16
поправил,результат тот же :\
0
25 / 25 / 3
Регистрация: 27.12.2009
Сообщений: 82
08.01.2010, 21:33 17
C++
1
2
3
4
5
6
p=0;
for(j=0;j<razmer;j++)
 if (a[i][j]<0)
{a[i][j]=d[p]
p++;
}
Это исправил???
1
0 / 0 / 0
Регистрация: 08.01.2010
Сообщений: 13
08.01.2010, 21:34  [ТС] 18
в 62 строке добавить в конце ;
ошибок нет,но не сортирует
да,исправил я это
А у вас работает? вы проверяли? или только код написали
0
25 / 25 / 3
Регистрация: 27.12.2009
Сообщений: 82
08.01.2010, 21:42 19
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
for (i=0;i<razmer;i+=2)
   for(j=0;j<razmer;j++)
{
{
  if (a[i][j]<0)
  {            // здесь еще скобки нужны были
d[k]=a[i][j];
  k++;
}
}
for(b=0;b<k-1;b++)
{
for (p=0; p<k; p++)
if (d[p]>d[p+1])
{
x=d[p];
d[p]=d[p+1];
d[p+1]=x;
}
}
p=0;
for(j=0;j<razmer;j++)
 if (a[i][j]<0)
{a[i][j]=d[p]
p++;
}
}
Добавлено через 3 минуты
То и именно, что я без программы, на каникулах дома, эт тебе надо отладку было делать пошаговую, смотреть, где ошибка. Компилятор из меня плохой
1
0 / 0 / 0
Регистрация: 08.01.2010
Сообщений: 13
08.01.2010, 21:46  [ТС] 20
вот так всё получилось
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
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
#include <stdio.h>
#include <conio.h>
void main()
{
    FILE *fw,*fr;
    double a[20][20],x,d[20];
    int i,j,razmer,k=0,p=0,b;;
    fw=fopen("log.txt","w");
    do
    {
        printf("vvedite razmer matrici (maximum 20):\n");
        scanf("%d",&razmer);
    }
    while (razmer>20 || razmer<1);
    printf("\n");
    fr=fopen("input.txt","r");
    for (i=0; i<razmer; i++)
    {
        for (j=0; j<razmer; j++)
        {
            fscanf (fr, "%lf", &a[i][j]);
        }
    }
    fclose(fr);
    printf ("\n Matrix: \n");
    fprintf (fw,"Matrix: \n");
    for(i=0; i<razmer; i++)
    {
        for (j=0; j<razmer; j++)
        {
            printf("%10.2lf", a[i][j]);
            fprintf(fw, "%10.2lf" , a[i][j]);
        }
        printf("\n");
        fprintf(fw, "\n");
    }
for (i=0;i<razmer;i+=2)
   for(j=0;j<razmer;j++)
{
{
  if (a[i][j]<0)
  {            
d[k]=a[i][j];
  k++;
}
}
for(b=0;b<k-1;b++)
{
for (p=0; p<k; p++)
if (d[p]>d[p+1])
{
x=d[p];
d[p]=d[p+1];
d[p+1]=x;
}
}
p=0;
for(j=0;j<razmer;j++)
 if (a[i][j]<0)
{a[i][j]=d[p];
p++;
}
}
    printf ("\n Rezultat: \n");
    fprintf (fw,"Rezultat: \n");
    for(i=0; i<razmer; i++)
    {
        for (j=0; j<razmer; j++)
        {
            printf("%10.2lf", a[i][j]);
            fprintf(fw, "%10.2lf" , a[i][j]);
        }
        printf("\n");
        fprintf(fw, "\n");
    }
    getch();
}
ошибок при отладке не выдает
но когда программу запускаешь всякую шляпу пишет:

Matrix:
-2.00 -4.00 -6.00 5.00 -3.00
3.00 -7.00 9.00 -6.00 2.00
1.00 0.00 -5.00 9.00 -9.00
0.00 -3.00 2.00 -1.00 6.00
-7.00 3.00 5.00 2.00 -1.00
Rezultat:
-4.00 -2.001071228898741904824300000000000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000.00 5.001071384487429119874100000000000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000.00
3.00 -7.00 9.00 -6.00 2.00
1.00 0.00 -4.00 9.00 -2.00
0.00 -3.00 2.00 -1.00 6.00
-7.00 3.00 5.00 2.00 -4.00
0
08.01.2010, 21:46
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
08.01.2010, 21:46
Помогаю со студенческими работами здесь

Подсчет количества, суммы и произведения нечетных отрицательных чисел
помогите сделать подсчет количества, суммы и произведения нечетных отрицательных чисел

Провести сортировку по возрастанию отрицательных чисел в нечетных строках
Условие задачи. Дан целый массив максимальной размерности 20*20. Провести сортировку по...

Найти разность произведения нечетных чисел 3-ей строки и произведения отрицательных чисел 1-го столбца матрицы
Найти разность произведения нечетных чисел 3-ей строки и произведения отрицательных чисел 1-го...

Проверить, что произведение отрицательных чисел массива больше, чем произведение нечетных чисел
очередной раз, помогите пожалуйста Дан одномерный массив А, состоящий из целых чи¬сел. Если...


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

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