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

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

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 9, средняя оценка - 4.67
Nekonoko
0 / 0 / 0
Регистрация: 05.01.2013
Сообщений: 17
#1

Массивы. Посчитать количество положительных, найти минимальное, удалить строку с минимальным (Не могу найти ошибку) - C++

05.01.2013, 02:05. Просмотров 1179. Ответов 25
Метки нет (Все метки)

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
80
81
82
83
84
// Заданы матрицы X(8;4),Y(5;5),Z(6;9). 
// Для каждой из матриц определить строку, в которой находится наименьшее 
// количество положительных элементов.
// Удалить её.
// Последнюю строку матрицы обнулить.
// Элементы указанных матриц определяются по формулам: Хij=cos(1.9-i/3j) ;
// Yij=cos(5.7-i/2j) ;Zij=cos(1.4-i/4j) .
 
#include "stdafx.h"
#include "stdlib.h"
#include "conio.h"
#include "stdio.h"
#include "math.h"
 
void form(float **F,int ni,int nj,float a,float b)
{
    int i,j;
    *F=(float*)malloc(ni*nj*sizeof(float));
    for(i=0;i<ni;i++)
        for(j=0;j<nj;j++)
            *(*F+i*nj+j)=cos(a-i/b*j);
}
void vivod(float**F,int ni,int nj)
{
    int i,j;
    for(i=0;i<ni;i++)
    {
        for(j=0;j<nj;j++)
        {
            printf("%8.1f", *(*F+i*nj+j));
            printf("\n");
        }
    }
}
void kolvo(float **F,int ni,int nj)
{
    int i,j,kx,kmin,jmin,s;
    kmin=ni;
    for(j=0;j<nj;j++)
        for(i=0;i<ni;i++)
            if(*(*F+i*nj+j)>0)
                kx++;
                if(kx<kmin)
                    kmin=kx;
                    jmin=s;
 
    printf("%kmin=%d jmin=%d\n",kmin,jmin);
    for(j=0;j>=s;j++)
        for(i=0;i<ni;i++)
        {
            *(*F+i*nj+j)=*(*F+i*nj+j+1);
            *(*F+nj+j)=0;
        }
 
}
int _tmain()
{
    int ni,nj;
    float *X,*Y,*Z;
 
    printf("Input size of array:\n");
    scanf("%d%d",&ni,&nj);
    form(&X,ni,nj,1.9,3);
    vivod(&X,ni,nj);
    kolvo(&X,ni,nj);
    free (X);
 
    printf("Input size of array:\n");
    scanf("%d%d",&ni,&m);
    form(&Y,ni,nj,5.7,2);
    vivod(&Y,ni,nj);
    kolvo(&Y,ni,nj);
    free (Y);
 
    printf("Input size of array:\n");
    scanf("%d%d",&ni,&nj);
    form(&Z,ni,nj,1.4,4);
    vivod(&Z,ni,nj);
    kolvo(&Z,ni,nj);
    free (Z);
 
    getch();
    return 0;
}
Плохо пока разбираюсь в указателях и функциях, программу пыталась написать, пользуясь примерами с интернета, и примерами одногруппников... по заданию рассуждала так: задать массив, посчитать количество положительных, найти минимальное, удалить строку с минимальным.. вот там, где я искала просто количество, должно быть верно по идее, но именно там прога выдаёт ошибку. а как среди этих количеств найти уже минимальное, запомнить номер строки, где оно находится, удалить эту строку, и вместо последней записать нули.. там, наверное, полный бред -__-" вот мои попытки выполнить задачу, не могу найти проблему, просьба не делать рукалицо, если это уж слишком примитивная задача.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
05.01.2013, 02:05     Массивы. Посчитать количество положительных, найти минимальное, удалить строку с минимальным (Не могу найти ошибку)
Посмотрите здесь:

Дан текстовый файл.текст. числа, разделённые пробелами. Найти количество положительных чисел. Удалить строку с min количеством чисел (на С) - C++
Дан текстовый файл, состоящий из одной или нескольких строк. Каждая строка файла содержит числа, разделенные пробелами. Найти количество...

Не могу найти ошибку. Массивы. - C++
Есть задание: Найти номер первого максимального значения среди элементов, меньших Т и расположенных правее первого элемента, кратного 3. ...

Найти сумму и количество положительных элементов, расположенных между минимальным и максимальным элементами массива. - C++
Дан массив А(30). Найти сумму и количество положительных элементов, расположенных между минимальным и максимальным элементами массива. С++

Посчитать количество слов в предложении (найти ошибку) - C++
Здравствуйте! Вот несложная задача на строки. Я ее решил стандартным методом, через потоки. Но в последнем тесте - неправильный ответ....

Не могу найти ошибку в коде, двумерные и одномерные массивы - C++
# include &lt;iostream.h&gt; # include &lt;iomanip.h&gt; # include &lt;conio.h&gt; # include &lt;fstream.h&gt; # define m 10 # define n 5 # define k 50...

Двумерные массивы. Найти количество положительных элементов в каждой строке массива - C++
Задан двумерный массив действительных чисел m на n. Элементы массива инициализируются или вводятся с клавиатуры. Найти количество...

Двумерные массивы. Найти количество положительных элементов в каждой строке массива - C++
Задан двумерный массив действительных чисел a на b. Элементы массива инициализируются или вводятся с клавиатуры. Найти количество...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Psilon
Master of Orion
Эксперт .NET
5882 / 4779 / 633
Регистрация: 10.07.2011
Сообщений: 14,399
Записей в блоге: 5
Завершенные тесты: 4
05.01.2013, 03:05     Массивы. Посчитать количество положительных, найти минимальное, удалить строку с минимальным (Не могу найти ошибку) #2
Nekonoko, ну так выделять память надо нормально:
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
int **p;
    int nr,nc,j,i;
 
    printf ("Razmernost:");
    scanf ("%i%i",&nr,&nc);
    p =(int**)malloc(sizeof(int) * nr);
    for (i=0; i<nr; i++)
    {
        p[i] = (int*)malloc(sizeof(int) * nc);
        for (j=0; j<nc; j++)
        {
            p[i][j]=(rand() + MIN) % MAX;
            printf("%-5i", p[i][j]);
        }
        printf("\n");
    }
    printf("\n");
...
Nekonoko
0 / 0 / 0
Регистрация: 05.01.2013
Сообщений: 17
05.01.2013, 03:30  [ТС]     Массивы. Посчитать количество положительных, найти минимальное, удалить строку с минимальным (Не могу найти ошибку) #3
пишет индификатор MIN MAX не определён, подчёркивает
Psilon
Master of Orion
Эксперт .NET
5882 / 4779 / 633
Регистрация: 10.07.2011
Сообщений: 14,399
Записей в блоге: 5
Завершенные тесты: 4
05.01.2013, 04:08     Массивы. Посчитать количество положительных, найти минимальное, удалить строку с минимальным (Не могу найти ошибку) #4
Nekonoko, ну так введите их. Если вы сами написали тот код, что выше, не думаю, что такая мелочь могла бы ввести вас в заблуждение, тем более, что это тестовый пример
Nekonoko
0 / 0 / 0
Регистрация: 05.01.2013
Сообщений: 17
05.01.2013, 04:18  [ТС]     Массивы. Посчитать количество положительных, найти минимальное, удалить строку с минимальным (Не могу найти ошибку) #5
Psilon, сама, ток пишу от фонаря. но ошибка осталась прежней.. когда запускаю отладку, прерывает выдаёт ошибку что-то типа индификатор kx не инициализирован или что-то вроде того:

Run-Time Check Failure #3 - The variable 'kx' is being used without being initialized.

думаю, я неправилно написала ту часть программы, где искала минимальное количество, вот только не знаю, как и что исправить
Psilon
Master of Orion
Эксперт .NET
5882 / 4779 / 633
Регистрация: 10.07.2011
Сообщений: 14,399
Записей в блоге: 5
Завершенные тесты: 4
05.01.2013, 09:21     Массивы. Посчитать количество положительных, найти минимальное, удалить строку с минимальным (Не могу найти ошибку) #6
Ну так инициализируйте их...
Nekonoko
0 / 0 / 0
Регистрация: 05.01.2013
Сообщений: 17
05.01.2013, 17:25  [ТС]     Массивы. Посчитать количество положительных, найти минимальное, удалить строку с минимальным (Не могу найти ошибку) #7
Psilon, инициализировала, но всё равно выдаёт ту же ошибку( мб я в другом что-то неправильно сделала
Psilon
Master of Orion
Эксперт .NET
5882 / 4779 / 633
Регистрация: 10.07.2011
Сообщений: 14,399
Записей в блоге: 5
Завершенные тесты: 4
05.01.2013, 17:27     Массивы. Посчитать количество положительных, найти минимальное, удалить строку с минимальным (Не могу найти ошибку) #8
Nekonoko, ждите ответ после 22.00, пока не за рабочим компьютером )
Nekonoko
0 / 0 / 0
Регистрация: 05.01.2013
Сообщений: 17
05.01.2013, 17:29  [ТС]     Массивы. Посчитать количество положительных, найти минимальное, удалить строку с минимальным (Не могу найти ошибку) #9
Psilon, хорошо =)
Psilon
Master of Orion
Эксперт .NET
5882 / 4779 / 633
Регистрация: 10.07.2011
Сообщений: 14,399
Записей в блоге: 5
Завершенные тесты: 4
05.01.2013, 19:03     Массивы. Посчитать количество положительных, найти минимальное, удалить строку с минимальным (Не могу найти ошибку) #10
Сообщение было отмечено автором темы, экспертом или модератором как ответ
Хотя попробую щас тут, выдались свободные 15 минуток)

Добавлено через 49 минут
Вот, смотрите, что получилось (ненужные библиотеки зависят от компилятора, неизвестные просто уберите )
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
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
#pragma hdrstop
#pragma argsused
 
#include <stdio.h>
#include <math.h>
 
 
double** InitializeMatrix(int m, int n, double a, double b)
{
    int i,j;
    double **result;
    result =(double**)malloc(sizeof(double) * m);
    for (i = 0; i < m; i++)
    {
        result[i] = (double*)malloc(sizeof(double) * n);
        for (j = 0; j < n; j++)
            result[i][j]=cos(a - i/(b*j + 1));
    }
    return result;
}
 
 
void PrintMatrix(double **F, int m, int n)
{
    int i,j;
    printf("\n");
    for (i = 0; i < m; i++)
    {
        for (j = 0; j < n; j++)
            printf("%4.2f\t", F[i][j]);
        printf("\n");
    }
}
 
double PositiveSum(double *row, int length)
{
    double result;
    int i;
    for (i = 0; i < length; i++)
        if (row[i] > 0)
            result += row[i];
    return result;
}
 
int MinPosIndex(double **F,int m, int n)
{
    int i, j, lastcount, newcount, result = 0;
    for (i = 0, lastcount = n; i < m; i++)
    {
        for (j = newcount = 0; j < n; j++)
            if (F[i,j] > 0)
                newcount++;
        if (newcount < lastcount)
            result = i;
    }
    return result;
}
 
 
double **RemoveRow(double **F,int m, int n, int index)
{
    int i,j;
    double **result;
    result =(double**)malloc(sizeof(double) * m - 1);
    for (i = j = 0; i < m; i++)
    {
        if (i == index)
            continue;
        result[j++] = F[i];
    }
    return result;
}
 
void TestProgram(int m, int n, double a, double b, char *name)
{
    int i;
    double **F, **G;    //Объявляем нужные переменные
    F = InitializeMatrix(m,n,a,b);
    printf("Matrix %s \r\n", name);
    PrintMatrix(F,m,n);
    printf("\nMatrix %s w/o row with minimal count of positives\r\n", name);
    G = RemoveRow(F,m,n,MinPosIndex(F,m,n));
    PrintMatrix(G,m-1,n);
    free(F);
    free(G);
}
 
 
int main()
{
    TestProgram(8,4,1.9,3,"X");
    TestProgram(5,5,5.7,2,"Y");
    TestProgram(6,9,1.4,4,"Z");
    getchar();
    return 0;
}
Добавлено через 16 минут
Алсо, я в формировании матрицы прибавил единичку в знаменателе, потому что ничего не знаю о том, кто составлял задание, и о его умственных способностях, но в случае j==0 получаем замечательное деление на ноль (если у вас его не было, значит неправильно считали, потому что i/(a*j) в случае j ==0 дает i / (a * 0) == i/0). Так что аккуратнее
Nekonoko
0 / 0 / 0
Регистрация: 05.01.2013
Сообщений: 17
05.01.2013, 19:45  [ТС]     Массивы. Посчитать количество положительных, найти минимальное, удалить строку с минимальным (Не могу найти ошибку) #11
Psilon, да препод задала, эта задача лабы, 1 курс, учим си. первые 2 библиотеки в коде не знаю) спасибо за помощь, покручу код)) будут вопросы - напишу ^^

Добавлено через 11 минут
насколько я поняла в отладке должна печататься исходная матрица, потом матрица без столбца с минимальным количеством положительных и последним нулевым столбцом ( как по заданию) но печатает непонятно что.. хотя почему непонятно что? удаляется первая строка(а не столбец) - не зависимо от того что даже если и построкам смотреть ( а не по столбцам как в задании) не всегда минимальное количество именно в 1 строке, но удаляется только она. матрица же записывается вообще без последней строки.
то есть программа не выполняет поставленную задачу(

у себя на компе я не пписала первые 2 библиотеки и подключила "stdlib.h" "conio.h" тк до этого у меня подчёркивало malloc

Добавлено через 3 минуты
Matrix X

-0.32 -0.32 -0.32 -0.32
0.62 -0.08 -0.19 -0.23
1.00 0.17 -0.04 -0.13
0.45 0.41 0.10 -0.03
-0.50 0.62 0.24 0.07
-1.00 0.80 0.38 0.17
-0.57 0.92 0.50 0.27
0.38 0.99 0.62 0.36

Matrix X w/o row with minimal count of positives

0.62 -0.08 -0.19 -0.23
1.00 0.17 -0.04 -0.13
0.45 0.41 0.10 -0.03
-0.50 0.62 0.24 0.07
-1.00 0.80 0.38 0.17
-0.57 0.92 0.50 0.27
0.38 0.99 0.62 0.36
Matrix Y

0.83 0.83 0.83 0.83 0.83
-0.01 0.61 0.71 0.75 0.77
-0.85 0.32 0.55 0.65 0.69
-0.90 -0.01 0.38 0.53 0.61
-0.13 -0.34 0.19 0.40 0.52

Matrix Y w/o row with minimal count of positives

-0.01 0.61 0.71 0.75 0.77
-0.85 0.32 0.55 0.65 0.69
-0.90 -0.01 0.38 0.53 0.61
-0.13 -0.34 0.19 0.40 0.52
Matrix Z

0.17 0.17 0.17 0.17 0.17 0.17 0.17 0.17 0.17
0.92 0.36 0.28 0.25 0.23 0.22 0.21 0.20 0.20
0.83 0.54 0.38 0.32 0.28 0.26 0.25 0.24 0.23
-0.03 0.70 0.48 0.39 0.34 0.31 0.29 0.27 0.26
-0.86 0.83 0.58 0.46 0.40 0.35 0.32 0.30 0.29
-0.90 0.92 0.66 0.53 0.45 0.40 0.36 0.34 0.32

Matrix Z w/o row with minimal count of positives

0.92 0.36 0.28 0.25 0.23 0.22 0.21 0.20 0.20
0.83 0.54 0.38 0.32 0.28 0.26 0.25 0.24 0.23
-0.03 0.70 0.48 0.39 0.34 0.31 0.29 0.27 0.26
-0.86 0.83 0.58 0.46 0.40 0.35 0.32 0.30 0.29
-0.90 0.92 0.66 0.53 0.45 0.40 0.36 0.34 0.32


вот что в отладке
Psilon
Master of Orion
Эксперт .NET
5882 / 4779 / 633
Регистрация: 10.07.2011
Сообщений: 14,399
Записей в блоге: 5
Завершенные тесты: 4
05.01.2013, 19:47     Массивы. Посчитать количество положительных, найти минимальное, удалить строку с минимальным (Не могу найти ошибку) #12
Ну я в курсе. Там только free неправильно работает: он удаляет ссылки, а элементы, на которые он указывает, не удаляет. Надо немного изменить. На работу не влияет, но утечка памяти происходит. А вывод, который вы напечатали, правильный, то есть соответствует поставленной задаче.
Nekonoko
0 / 0 / 0
Регистрация: 05.01.2013
Сообщений: 17
05.01.2013, 19:51  [ТС]     Массивы. Посчитать количество положительных, найти минимальное, удалить строку с минимальным (Не могу найти ошибку) #13
Psilon, да моя ошибка, я неправильно сформулировала задачу, всё же строки надо изменить, но не проблема переписать код, чтобы работало по столбцам ведь. как сделать, чтобы последнюю строку не удаляла программа а вместо элементов записывались нули? то есть размерность матрицы меняться не должна
Psilon
Master of Orion
Эксперт .NET
5882 / 4779 / 633
Регистрация: 10.07.2011
Сообщений: 14,399
Записей в блоге: 5
Завершенные тесты: 4
05.01.2013, 19:52     Массивы. Посчитать количество положительных, найти минимальное, удалить строку с минимальным (Не могу найти ошибку) #14
Nekonoko, так даже проще будет. Я сейчас уезжаю, через час напишу) Лучше пока разбирайтесь с тем, что есть
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
05.01.2013, 19:55     Массивы. Посчитать количество положительных, найти минимальное, удалить строку с минимальным (Не могу найти ошибку)
Еще ссылки по теме:

Посчитать количество строк и символов, удалить 2-ую строку и отдельно добавить в другой файл - C++
Уважаемые Форумчане, можете подсказать: 1) Есть текст какой то , например ывафывафывафыв аываывваа 23423 кцукцу ыава ...

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

Найти сколько положительных элементов располагается между максимальным и минимальным элементами - C++
#include&lt;stdio.h&gt; #include &lt;conio.h&gt; #include &lt;iostream&gt; using std::cout; using std::cin; using std::endl; int main() { ...

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

Массивы. Найти минимальное значение элементов массива - C++
Задание на масив на С++ Найти минимальное значение элементов массива. Вывести на дисплей полученное значение.После этого изменить...


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

Или воспользуйтесь поиском по форуму:
Nekonoko
0 / 0 / 0
Регистрация: 05.01.2013
Сообщений: 17
05.01.2013, 19:55  [ТС]     Массивы. Посчитать количество положительных, найти минимальное, удалить строку с минимальным (Не могу найти ошибку) #15
и + всё же не всегда программа корректно работает. например, в матрице У первая строка содержит не минимальное количество положительных а максимальное, но удаляется она.

Добавлено через 34 секунды
Цитата Сообщение от Psilon Посмотреть сообщение
Nekonoko, так даже проще будет. Я сейчас уезжаю, через час напишу) Лучше пока разбирайтесь с тем, что есть
окей..
Yandex
Объявления
05.01.2013, 19:55     Массивы. Посчитать количество положительных, найти минимальное, удалить строку с минимальным (Не могу найти ошибку)
Ответ Создать тему
Опции темы

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