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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 15, средняя оценка - 4.87
Stuzzy
0 / 0 / 0
Регистрация: 08.01.2010
Сообщений: 13
#1

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

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

Я никак не могу понять, как провести сортировку по возрастанию отрицательных чисел в нечетных строках матрицы методом пузырька.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
08.01.2010, 16:31
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Сортировка отрицательных чисел нечетных строк (C++):

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

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

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

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

Для чисел от -50 до 50 найти количество четных отрицательных и количество положительных нечетных чисел - C++
Ребят,всем привет! Помогите пожалуйста решить данную задачу.Ее нужно написать на я зыке C /C++,каждую из них с постусловием и...

Найти разность между произведением нечетных чисел и наибольшим среди отрицательных - C++
Вводится последовательность из N целых чисел, найти разность между произведением нечетных чисел и наибольшим среди отрицательных.

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

Добавлено через 2 минуты
Может, я не права Я б так делала
Stuzzy
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-размер массива
вроде бы так?
Tani
25 / 25 / 1
Регистрация: 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;
}
}
Еще же один цикл нужен , я забыла, много переменных получается. Ну одну стоку вставить надо
Stuzzy
0 / 0 / 0
Регистрация: 08.01.2010
Сообщений: 13
08.01.2010, 19:49  [ТС] #8
то,что Вы добавили позже, надо добавить после:
if (a[i][j]<0)
d[k]=a[i][j];
k++;
}
так?
Tani
25 / 25 / 1
Регистрация: 27.12.2009
Сообщений: 82
08.01.2010, 19:53 #9
да
Stuzzy
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();
}
Tani
25 / 25 / 1
Регистрация: 27.12.2009
Сообщений: 82
08.01.2010, 20:50 #11
Что именно не получается?
Stuzzy
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;
Tani
25 / 25 / 1
Регистрация: 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- я думаю, ты не объявил его как массив
Stuzzy
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
Tani
25 / 25 / 1
Регистрация: 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();
}
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
08.01.2010, 21:14
Привет! Вот еще темы с ответами:

Найти разность между произведением нечетных чисел и наибольшим среди отрицательных - C++
Всем привет) Вот дали задачу племяннице, а она соответственно попросила меня ее решить полагая, что я понимаю в С++, пришлось согласиться....

Найти разность между произведением нечетных чисел и наибольшим среди отрицательных - C++
Помогите пожалуйста решить задачку,сама пыталась,не выходит:cry:вот условие: Вводится последовательность из N целых чисел, найти...

Дано двумерный массив целых чисел. Найти номер строки, в которой сумма отрицательных нечетных элементов наибольшая - C++
помогите Пожалуста с задачей я не знаю как правильно прописать, чтоб он выводил число строки((( помогите пожалуста((#include&lt;iostream&gt; ...

Найти произведение двух наибольших и двух наименьших отрицательных нечетных чисел массива - C++
Найти произведение двух наибольших и двух наименьших отрицательных нечетных чисел массива Дана последовательность из n различных целых...


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
08.01.2010, 21:14
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru