Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.67/3: Рейтинг темы: голосов - 3, средняя оценка - 4.67
qwerty11
0 / 0 / 0
Регистрация: 12.05.2011
Сообщений: 13
#1

Функция с циклом

24.10.2013, 11:21. Просмотров 608. Ответов 3
Метки нет (Все метки)

Учусь писать на с++. В универе дали задание написать програмку, которая вычисляет сумму элементов матрицы фиксированного размера, лежащих выше главной диагонали. Дополнительные требования- в функции main должно быть обращение к функции, находящей сумму элементов лежащих выше главной диагонали. Массив заполняется случайными числами.

Написал програмку без функции, она работает, всё ок:

#include "stdafx.h"
#include <iostream>
#include <conio.h>
#include <math.h>
using namespace std;
int main()
{
int S, i, j, N, a[3][3];
N=3;
for (i=0; i<N; i++)
for (j=0; j<N; j++)
a[i][j]=rand()%10;
cout<<"matrix a \n";
for (i=0; i<N; i++)
{
for (j=0; j<N; j++)
cout<<a[i][j]<<"\t";
cout<<endl;
}
for (S=i=0; i<N; i++)
for (j=0; j<N; j++)
if (j>i) S+=a[i][j];
cout<<"S="<<S<<endl;
system("pause");
return 0;
}

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

/ 7.cpp: определяет точку входа для консольного приложения.
//
#include "stdafx.h"
#include <iostream>
#include <conio.h>
#include <math.h>
using namespace std;
int i, j,S, N, a[3][3];
int Summ ( int N)
{
for ( i=0; i<N; i++)
for (j=0; j<N; j++)
if (j>0) S+=1;
return S;
}
int main()
{
int i, j, N, a[3][3];
N=3;
for (i=0; i<N; i++)
for (j=0; j<N; j++)
a[i][j]=rand()%10;
cout<<"matrix a \n";
for (i=0; i<N; i++)
{
for (j=0; j<N; j++)
cout<<a[i][j]<<"\t";
cout<<endl;
}
cout<<"Summ="<<Summ(N)<<endl;
system("pause");
return 0;
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
24.10.2013, 11:21
Ответы с готовыми решениями:

Пытаюсь переписать код с циклом for, в код с циклом while, но не совсем получается
Возникло пару вопросов: #include &lt;iostream&gt; using namespace std; int main ()...

Затруднения с циклом do-while
Здравствуйте! Дано задание: Используя оператор цикла do-While, составить...

Задача с циклом
Здравствуйте. Начал осваивать язык С++. Возникла трудность с корректной записью...

Загвоздка с циклом for
Вообщем смысл задачи: дан отрезок на оси &quot;х&quot; от &quot;а&quot; до &quot;b&quot; , и задан шаг на...

Найти 7! с циклом for
Нужно найти факториал 7 с циклом for, как без цикла сделать я знаю

3
Rivory
146 / 112 / 21
Регистрация: 15.01.2013
Сообщений: 266
24.10.2013, 11:37 #2
Используйте тег [CPP] при оформлении кода.
0
Рыжий Лис
Просто Лис
1185 / 510 / 343
Регистрация: 17.05.2012
Сообщений: 2,062
Записей в блоге: 8
24.10.2013, 11:46 #3
Цитата Сообщение от qwerty11 Посмотреть сообщение
if (j>i) S+=a[i][j];
Цитата Сообщение от qwerty11 Посмотреть сообщение
if (j>0) S+=1;
сравните эти строки. Почему они вдруг должны отличатся?
0
Rivory
146 / 112 / 21
Регистрация: 15.01.2013
Сообщений: 266
24.10.2013, 11:48 #4
Не понятно, с чего вы вдруг начали изменять уже работающий код, при переносе его в функцию? Почему j>0 а не j>i? Почему S+=1 а не S+=a[i][j]?

Кстати да, саму матрицу в функцию тоже надо передавать, как иначе то? Одного N там недостаточно.

Глобальных переменных тоже там не надо никаких, не надо бояться объявить переменные с одинаковым названием в разных зонах видимости.

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
#include <iostream>
#include <conio.h>
#include <math.h>
using namespace std;
 
int Summ (int N, int a[3][3])
{
    int S = 0; int i, j;
    for (i=0; i<N; i++)
        for (j=0; j<N; j++)
            if (j>i)
                S+=a[i][j];
    return S;
}
 
int main()
{
    int i, j, N, a[3][3];
    N=3;
    for (i=0; i<N; i++)
        for (j=0; j<N; j++)
            a[i][j]=rand()%10;
    cout<<"matrix a \n";
    for (i=0; i<N; i++)
    {
        for (j=0; j<N; j++)
            cout<<a[i][j]<<"\t";
        cout<<endl;
    }
    cout<<"Summ="<<Summ(N, a)<<endl;
    system("pause");
    return 0;
}
И да, наверное было бы логичнее использовать #define N 3
и объявлять массив как a[N][N]; Тогда и N не надо будет передавать в функцию.
1
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
24.10.2013, 11:48

Работа с циклом do while
Здравствуйте! есть задача в которой используется метод прогонки с проверкой...

Программа с циклом
# include &lt;iostream&gt; # include &lt;iomanip&gt; # include &lt;cmath&gt; # include...

Трудности с циклом
Я недавно начал изучать с++. Мне захотелось написать калькулятор. Чтобы...


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

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Опции темы

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