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

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

Войти
Регистрация
Восстановить пароль
 
 
ГузелькаС
5 / 5 / 0
Регистрация: 04.12.2011
Сообщений: 178
#1

не могу закончить программу. основу (как я считаю) я написала. доработать не получается - C++

05.04.2012, 13:26. Просмотров 1000. Ответов 21
Метки нет (Все метки)

уменьшить элементы столбца на величину их индекса. вывести на экран сумму нечетных элементов в столбце. промежуточная функция: выполнить действия для столбцов, у которых первый элемент не равен нулю.


ошибка : error C2109: для индекса требуется массив или указатель

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
#include "stdafx.h"
#include <stdio.h>
#include <conio.h>
// создать двумерный массив 3х4
//ввод элементов
void massiv()
{ int mas[3][4];
    for (int i=0; i<3; i++)
    for (int j=0; j<4; j++)
    {
        scanf("%d",&mas[i][j]);
    }
}
 
//уменьшить элементы столбца на величину их индекса
void umenshenie (int mas)
{for (int i1=0; i1<3; i1++)
    mas[i1]=mas[i1]-i1;
}
//количество нечетных элементов
void kol(int mas)
{int i, s;
s=0;
for (int i=0; i<3; i++)
    for (int j=0; j<4; j++)
    {
        if (mas[i][j]%2!=0)
            s+=mas[i][j];
    }
    printf("%d\n",s);
}
 
void f(int mas) 
{for (int j=0; j<4; j++)
    if (mas[0][j]!=0) 
    {
        umenshenie(mas);
        kol(mas);
    }
}
void print(int mas) 
{
    int i,j;
    for (i=0;i<3;i++)
    for (j=0; j<4; j++)
        printf("%d",mas[i][j]);
    puts("\n");
}
 
int main()
{int mas;
    massiv();
    f(mas);
    print(mas);
    getch();
    return 0;
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
05.04.2012, 13:26
Здравствуйте! Я подобрал для вас темы с ответами на вопрос не могу закончить программу. основу (как я считаю) я написала. доработать не получается (C++):

Не могу закончить программу - C++
Сделал часть программы,но не получается никак сделать 2 часть: Выведите список студентов, которым будет предоставляться места в...

Не могу доработать программу - C++
Вообщем такое задание :Описать структуру с именем Order, содержащую следующие поля: plat-расчетный счет плательщика, pol- расчетный счет...

Написала программу, выводит ошибку, подскажите как исправить - C++
Вот сама задача:Вычислить и вывести на экран значения функции y = f(x) в точках x0=xнач, x1=x0+h, x2=x1+h, … xN = xкон, где h =(xкон –...

Написала программу, но не знаю, как анализатор добавить в нее - C++
#include&lt;iostream&gt; int main() { double da, db, dc; char op; std::cout &lt;&lt; &quot;Введите 1 число: &quot;; std::cin &gt;&gt; da; ...

Написала программу,но работает не так, как нужно. Что исправить? - C++
Дано простое число. Написать функцию, которая находит следующее простое число. Никаких ошибок и предупреждений не выводит. Но ,допустим,...

Я написала программу, но не получается. в чем моя ошибка? - Pascal
даны целые числа x..x,y..y. вычислите u: u=\begin{cases}\sum_{i=1}^{20}x_i^2 &amp; \text{, if } \sum_{i=1}^{20}x_iy_i\ &gt;\ 0\\\\...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
KATbIK
86 / 81 / 10
Регистрация: 02.08.2011
Сообщений: 335
05.04.2012, 13:37 #2
int mas; - не массив
ГузелькаС
5 / 5 / 0
Регистрация: 04.12.2011
Сообщений: 178
05.04.2012, 13:40  [ТС] #3
а как мне изменить программу чтобы работала она?
alexey31415
59 / 59 / 3
Регистрация: 16.05.2010
Сообщений: 632
05.04.2012, 13:59 #4
Цитата Сообщение от ГузелькаС Посмотреть сообщение
void umenshenie (int mas)
{for (int i1=0; i1<3; i1++)
* * mas[i1]=mas[i1]-i1;
}
вы передаёте функции целое число и хотите,чтоб она считала это массивом целых чисел
создайте класс,каждый объект которого имеет массив целочисленных значений и функции для обработки этого массива
и ещё,передавайте функции не число,а указатель на массив
ГузелькаС
5 / 5 / 0
Регистрация: 04.12.2011
Сообщений: 178
05.04.2012, 14:02  [ТС] #5
для меня это очень сложно(((
я не понимаю((
alexey31415
59 / 59 / 3
Регистрация: 16.05.2010
Сообщений: 632
05.04.2012, 15:22 #6
сейчас напишу

Добавлено через 1 час 11 минут
а каковы размеры массива в программе?а то у меня проблемы возниклис динамическим выделением памяти для двухмерного массива
ГузелькаС
5 / 5 / 0
Регистрация: 04.12.2011
Сообщений: 178
05.04.2012, 15:23  [ТС] #7
размер не указан. произвольный.
alexey31415
59 / 59 / 3
Регистрация: 16.05.2010
Сообщений: 632
05.04.2012, 15:26 #8
теперь уже у меня вопрос,как решить проблему с записью чисел в массив
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#ifndef ARRAY_H
#define ARRAY_H
 
class Array
{
public:
    Array(int = 10,int = 10);//
    ~Array();
    void enter();
    void diff(int);
    int calc();
    void print();
private:
    int size1;
    int size2;
    int **p;
};
 
#endif
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<new>//определения функций
#include<iostream>
using std::cin;
using std::cout;
 
 
#include "Array.h"
 
Array::Array(int SIZE1,int SIZE2)
{
    size1 = SIZE1;//количество строк
    size2 = SIZE2;//количество столбцов
    int **p = new int*[size1];//создаём массив из указателей на int
    for(int i = 0;i < size1;i++)
        p[i] = new int[size2];//каждому указателю из массива присваивается адрес на массив целых чисел
 
    for(int i = 0;i < size1;i++)
    {
        int *temp = p[i];
        for(int j = 0;j < size2;j++)
        {
            temp[j] = 0;
        }
    }
}
 
Array::~Array()//деструктор,уничтожает объекты класса
{
    for(int i = 0;i < size1;i++)
        delete []p[i];
 
    delete []p;
 
}
 
void Array::enter()//ввод значений
{
    cout << "Enter the values:\n";
    for(int i = 0;i < size1;i++)
    {
        int *temp = p[i];
        for(int j = 0;j < size2;j++)
        {
            cin >> temp[j];
        }
    }
}
 
void Array::diff(int column)//вводим номер столбца и его элементы уменьшаются
{
    for(int i = 0;i < size2;i++)
        p[i][column] = p[i][column] - i; 
}
 
int Array::calc()//считаем сумму нечётных элементов
{
    int total = 0;
    for(int i = 0;i < size1;i++)
    {
        for(int j = 0;j < size2;j++)
        {
            if(p[i][j] %2 != 0)
                total +=p[i][j];
        }
    }
    return total;
}
 
void Array::print()//вывод значений
{
    for(int i = 0;i < size1;i++)
    {
        for(int j = 0;j < size2;j++)
        {
            cout << p[i][j] << ' ';
        }
        cout << '\n';
    }
}
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#include "Array.h"
 
#include <iostream>
using std::cout;
using std::endl;
 
int main()
{
    Array a(2,3);
 
    a.enter();
    cout << endl;
 
    a.diff(2);
    a.print();
 
    int b = a.calc();
    cout << b << endl;
    a.print();
 
    return 0;
}
UFO94
264 / 253 / 13
Регистрация: 04.04.2012
Сообщений: 546
05.04.2012, 15:51 #9
Госспади, зачем же класс?
Просто динамический 2-х мерный массив.
C++
1
2
3
int* *mas=new int*[n];
for(int i=0; i<n; i++)
mas[i]=new int[m];
Массив n на m

Добавлено через 16 минут
C++
1
2
3
4
5
6
7
8
9
//ввод элементов
void massiv()//А как вы будете использовать mas вне этой функции? Вы же его не вывели!
{ int mas[3][4];
    for (int i=0; i<3; i++)
    for (int j=0; j<4; j++)
    {
        scanf("%d",&mas[i][j]);
    }
}
Меняем на
C++
1
2
3
4
5
6
7
8
9
10
11
int* *massiv()
{
int* *mas=new int*[3];//Обьявление двухмерного динамического массива -- и не надо классов
for(int i=0; i<3; i++)
{
mas[i]=new int[4];
for(int j=0; j<4; j++)
scanf("%d",&mas[i][j]);
}
return mas;//А здесь -- вывели
}
C++
1
2
3
4
5
//уменьшить элементы столбца на величину их индекса
void umenshenie (int mas)//mas -- указатель, и имеет тип int* *
{for (int i1=0; i1<3; i1++)
    mas[i1]=mas[i1]-i1;//mas[i1] -- указатель на i1 столбец, и имеет тип int*
}
Исправляем на
C++
1
2
3
4
5
void umenshenie (int* *mas)
{for (int i=0; i<3; i++)//Поверьте, можете спокойно использовать i
for(int j=0; j<4; j++)
    mas[i][j]=mas[i][j]-i;
}
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
//количество нечетных элементов
void kol(int mas)//и здесь тоже int* *mas
{int i, s;
s=0;
for (int i=0; i<3; i++)
    for (int j=0; j<4; j++)
    {
        if (mas[i][j]%2!=0)
            s+=mas[i][j];//Раз уж количество, то может их будем по единичке считать? Т.е. s+=1?
    }
    printf("%d\n",s);
}
 
void f(int mas)//и здесь тоже int* *mas
{
for (int j=0; j<4; j++)
    if (mas[0][j]!=0) 
    {
        umenshenie(mas);
        kol(mas);
    }
}
void print(int mas) //и здесь тоже int* *mas
{
    int i,j;
    for (i=0;i<3;i++)
    for (j=0; j<4; j++)
        printf("%d",mas[i][j]);
    puts("\n");
}
C++
1
2
3
4
5
6
7
8
int main()
{int mas;
    massiv();
    f(mas);
    print(mas);
    getch();
    return 0;
}
А здесь поменяем на
C++
1
2
3
4
5
6
7
8
int main()
{
    int* *mas=massiv();
    f(mas);
    print(mas);
    getch();
    return 0;
}
Toshkarik
1140 / 857 / 51
Регистрация: 03.08.2011
Сообщений: 2,384
Завершенные тесты: 1
05.04.2012, 16:06 #10
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
#include <iostream>
#include <iomanip>
#include <cstdlib>
#include <cmath>
#include <ctime>
 
/*
 *
 */
int **initArray( const int size ) {         // создать массив size x size
    int **tmp = new int*[ size ];
 
    for ( int i = 0; i < size; i++ ) {
        tmp[ i ] = new int[ size ];
 
        for ( int j = 0; j < size; j++ )
            tmp[ i ][ j ] = 0;
    }
 
    return tmp;
}
 
void randArray( int *const *const a, const int size ) {  //заполнить массив size x size случайными числами
    for ( int i = 0; i < size; i++ )
        for ( int j = 0; j < size; j++ )
            a[ i ][ j ] = std::rand() % 100;
}
 
void outputArray( const int *const *const a, const int size ) {  //вывод массива на экран
    for ( int i = 0; i < size; i++ ) {
        for ( int j = 0; j < size; j++ )
            std::cout << std::setw( 2 ) << a[ i ][ j ] << ' ';
 
        std::cout << std::endl;
    }
}
 
void decreaseCol( int *const *const a, const int size ) { //уменьшение элементов столбцов на их индекс
    for ( int i = 0; i < size; i++ )
        for ( int j = 0; j < size; j++ )
            a[ i ][ j ] -= j;
}
 
int main() {
    const int size = 10;
    int **array = initArray( size );
    int sum = 0;
 
    std::srand( std::time( 0 ));
 
    randArray( array, size );
 
    std::cout << "Array:" << std::endl;
    outputArray( array, size );
 
    std::cout << "\nArray after decreasing elements of columns:" << std::endl;
    decreaseCol( array, size );
    outputArray( array, size );
 
    std::cout << "\nThe sum of odd elements of columns: " << std::endl;
    for ( int j = 0; j < size; j++ ) {
        sum = 0;
 
        for ( int i = 0; i < size; i++ )
            if ( array[ i ][ j ] % 2 )
                sum += array[ i ][ j ];
 
        std::cout << std::setw( 2 ) << j + 1 << " column: " << sum << std::endl;
    }
 
    return 0;
}
Единственно не понял до конца, что за промежуточная функция, и какие действия она должна производить?
ГузелькаС
5 / 5 / 0
Регистрация: 04.12.2011
Сообщений: 178
05.04.2012, 16:10  [ТС] #11
промежуточная функция должна выбрать именно те столбцы, где первый элемент не равен нулю.


мне бы программу на СИ (а не на СИ++) ((((
alexey31415
59 / 59 / 3
Регистрация: 16.05.2010
Сообщений: 632
05.04.2012, 16:29 #12
Цитата Сообщение от UFO94 Посмотреть сообщение
printf("%d",mas[i][j]);
не выведешь так,у меня ошибка была

Добавлено через 2 минуты
Цитата Сообщение от Toshkarik Посмотреть сообщение
for ( int j = 0; j < size; j++ )
* * * * * * a[ i ][ j ] = std::rand() % 100;
у меня не получалось так занести данные в массив,если знаете где ошибка в моём коде(моё сообщение немного выше),то подскажите пожалуйста где я ошибся
Toshkarik
1140 / 857 / 51
Регистрация: 03.08.2011
Сообщений: 2,384
Завершенные тесты: 1
05.04.2012, 16:37 #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
#include <stdlib.h>
#include <time.h>
#include <stdio.h>
 
/*
 *
 */
int **initArray( const int size ) {         // создать массив size x size
    int **tmp = ( int** ) calloc( size, sizeof( int* ));
 
    for ( int i = 0; i < size; i++ )
        tmp[ i ] = ( int* ) calloc( size, sizeof( int ));
 
    return tmp;
}
 
void randArray( int **a, const int size ) {  //заполнить массив size x size случайными числами
    for ( int i = 0; i < size; i++ )
        for ( int j = 0; j < size; j++ )
            a[ i ][ j ] = rand() % 100;
}
 
void outputArray( const int *const *const a, const int size ) {  //вывод массива на экран
    for ( int i = 0; i < size; i++ ) {
        for ( int j = 0; j < size; j++ )
            printf( "%2i ", a[ i ][ j ] );
 
        printf( "\n" );
    }
}
 
void decreaseCol( int *const *const a, const int size ) { //уменьшение элементов столбцов на их индекс
    for ( int j = 0; j < size; j++ )
        if ( a[ 0 ][ j ] )
            for ( int i = 0; i < size; i++ )
                a[ i ][ j ] -= j;
}
 
int main() {
    const int size = 10;
    int **array = initArray( size );
    int sum = 0, i = 0, j = 0;
 
    srand( time( 0 ));
 
    randArray( array, size );
 
    printf( "Array:\n" );
    outputArray( array, size );
 
    printf("\nArray after decrease elements of columns:\n" );
    decreaseCol( array, size );
    outputArray( array, size );
 
    printf( "\nThe sum of odd elements of columns: \n" );
    for ( j = 0; j < size; j++ ) {
        if ( array[ 0 ][ j ] ) {
            for ( i = 0; i < size; i++ )
                if ( array[ i ][ j ] % 2 )
                    sum += array[ i ][ j ];
 
            printf( "%i column: %i\n", j + 1, sum );
            sum = 0;
        }
    }
 
    return 0;
}
Переделал под C.

Добавлено через 3 минуты
alexey31415, зачем вы в конструкторе опять объявляете **P? В конструкторе нужно инициализировать а не объявлять новые элементы данных класса.

Цитата Сообщение от alexey31415 Посмотреть сообщение
int **p = new int*[size1];//создаём массив из указателей на int
на
C++
1
**p = new int*[size1];
a.n.o.n.i.m
137 / 137 / 15
Регистрация: 26.02.2011
Сообщений: 528
05.04.2012, 16:46 #14
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 "stdafx.h"//oa?aou "//" anee a aea?oae caioneaou(?aceiiiaioe?iaaou)
#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
 
int main()
{
   int n,i,j,m;
   while(!fflush(stdin)&&printf("Vvedite kolichestvo strok = ")&&!scanf("%i",&m));
   while(!fflush(stdin)&&printf("Vvedite kolichestvo stolbcov = ")&&!scanf("%i",&n));
   int **A = (int**)malloc(m*sizeof(int));
   for(i=0; i<m;i++)
   {
          A[i] = (int*)malloc(n*sizeof(int));
   }
   printf("\nVvedite elementy matrix A\n\n");
   for(i=0;i<m;i++)
   {
          for(j=0;j<n;j++)
          {
                      while(!fflush(stdin)&&printf("A[%d][%d] = ",i+1,j+1)&&!scanf("%i",&A[i][j]));
          }
   }
   system("cls");
   printf("\tMatrix A\n\n");
   for(i=0;i<m;i++)
   {
          for(j=0;j<n;j++)
          {
                      printf("%d ",A[i][j]);
          }
          printf("\n");
   }
//=======================================================================//
  printf("\nSumma nechetnyh elements v stolbcah matrix A\n\n");
   for(j=0;j<n;j++)
   {
          int sum=0;
          for(i=0;i<m;i++)
          {
                          if(A[i][j]%2!=0)
                          {
                                    sum+=A[i][j];
                          }
                      
          }
             printf("%d ",sum);
   }
//=======================================================================//
 
 
   printf("\n\n\tMatrix sort. A\n\n");
   for(i=0;i<m;i++)
   {
          for(j=0;j<n;j++)
          
                         A[i][j]=A[i][j]-(j+1);
          
   }
   for(i=0;i<m;i++)
   {
          for(j=0;j<n;j++)
          {
                      printf("%d ",A[i][j]);
          }
          printf("\n");
   }
//=======================================================================//
   for(i=0; i<m;i++)
   {
           free(A[i]);
   }
   free(A);
   getch();
   return 0;
}
Добавлено через 1 минуту
Блин сидел голову ломал аж самого зацепило ввожу матрицу 1 2 3 4 5 6 7 8 9
мне выдает 0 0 0 3 3 3 6 6 6 я думал косяк,дальше сижу думаю,проходит час-полтора,потом уже хотел забить опять считаю,и о невероятно это же верно было
alexey31415
59 / 59 / 3
Регистрация: 16.05.2010
Сообщений: 632
05.04.2012, 16:56 #15
Цитата Сообщение от Toshkarik Посмотреть сообщение
**p = new int*[size1];
когда пытаюсь откомпилировать программу пишет мне error C2440: =: невозможно преобразовать "int **" в "int"
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
05.04.2012, 16:56
Привет! Вот еще темы с ответами:

Написала программу на Haskell, не могу найти ошибку - Haskell
Добрый вечер! На Haskell нужно было написать простую программку.(только начали учить), написала.Но не запускается.Помогите найти...

Вывод информации. Не получается закончить программу в паскале - Turbo Pascal
Всем привет. Задача такая: Составить программу для вычисления длин высот треугольника, у которого длины сторон a,b,c ( целые числа...

Не могу закончить программу - Lazarus
Есть код авторизации для подключения к базе данных, необходимо его закончить, потому как при вводе неправильного логина, пароля или хоста,...

Не могу закончить программу на Delphi - Delphi
Программа: ввести строку символов, которая заканчивается точкой. Каждый нечетный символ &quot;q&quot; удалить, а четный-удвоить. Все, что у меня...


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

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

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