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

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

Войти
Регистрация
Восстановить пароль
 
Lil Crazy
6 / 6 / 1
Регистрация: 23.03.2009
Сообщений: 198
#1

Возвращаемое значение функции - C++

14.05.2009, 20:37. Просмотров 728. Ответов 3
Метки нет (Все метки)

Здарвствуйте. Моя задача состоит в написании следующей программы: вычислить среднее арифметическое значение элементов матрицы W(L,L), расположенных слева и справа от двух диагоналей. Эта программа программа написана на паскале:
Pascal
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
uses crt;
const nmax=30;{максимальный размер матрицы}
var W:array[1..nmax,1..nmax]of real;{тип матрицы}
    L,i,j,k:integer;
    sr:real;{среднее}
begin
clrscr;
randomize;{генерация случайных чисел}
repeat
write('Razmer matricy L=');
readln(L);
until (L>=3)and(L<=nmax);{проверяем размер матрицы}
writeln('Matrica W:');
sr:=0;k:=0;
for i:=1 to L do
   begin
     for j:=1 to L do
       begin
         W[i,j]:=10*random;{заполняем матрицу случайными вещественными числами из инт. 0-10}
         if((j<i)and(j<L-i+1))or((j>i)and(j>L-i+1)){если мы в заданной области}
         then
           begin
             TextColor(4);{сделаем подсветку красным}
             k:=k+1; {сосчитаем элементы этой области}
             sr:=sr+W[i,j]; {сосчитаем сумму}
             write(W[i,j]:5:2);{выведем с подсветкой}
           end
         else  {если за пределами области}
           begin
             Textcolor(0);{цвет по умолчанию}
             write(W[i,j]:5:2);{выводим остальные числа}
           end;
       end;
     writeln;
   end;
sr:=sr/k;{считаем среднее}
writeln('Srednee=',sr:0:2);
readln
end.
Я её переделал на си:
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
#include <iostream>
#include <stdio.h>
#include <conio.h>
#include <math.h>
 
float SortMatrix(int **W, const int L)
{
    int i,j;
    int k=0;
    float sr=0;
    for (i=1;i<L;i++)
    {
        for (j=1;j<L;j++)
        {
            if (((j<i) && (j<L-i+1)) || ((j>i) &&(j>L-i+1)))
            {
                k=k+1;
                sr=sr+W[i][j];
            }
        }
    }
    sr=sr/k;
    return sr;
}
 
void PrintMatrix(int **W, const int L)
{
    int i,j;
    for (i=0;i<L;i++)
    {
        for (j=0;j<L;j++)
        {
            printf("%5i",W[i][j]);
        }
        printf("\n");
    }
}
 
void main()
{  
    int L;
    int i,j;
    float sr;
    FILE *InputFile,*OutputFile;
    char PathIn[128],PathOut[128];
    printf("\nEnter a path for input file: ");
    scanf("%s",PathIn); 
    if ((InputFile=fopen(PathIn, "r")) == NULL )
    {
        perror(PathIn);
        exit;
    }
    fscanf (InputFile,"%d ",&L);
    int **W = new int*[L];
    for(i=0; i<L; i++)
    {
         W[i] = new int[L];
    } 
    for (i=0;i<L;i++)
    {
         for (j=0;j<L;j++)
            fscanf (InputFile,"%d ",&W[i][j]);
    }
    printf("Enter a path for output result file: ");
    scanf("%s",PathOut);  
    OutputFile=fopen(PathOut,"w+"); 
    fprintf(OutputFile,"Initial matrix:\n");
    printf("Initial matrix: \n");
    PrintMatrix(W,L);
    for (i=0;i<L;i++)
    {
        for (j=0;j<L;j++)
        {
            fprintf(OutputFile,"%4d",W[i][j]);
        }
        fprintf(OutputFile,"\n");
    }
    sr=SortMatrix(W,L);
    printf("Midlle ariphemetic is %d",sr);
    fprintf(OutputFile,"Midlle ariphemetic is %d",sr);
    fclose(OutputFile);
    fclose(InputFile);  
    for(i=0; i<L; i++)
    {
        delete[] W[i];
    }
    delete[] W;
    getch();
}
Но среднее значение всегда 0. Почему и как это исправить???
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
14.05.2009, 20:37     Возвращаемое значение функции
Посмотрите здесь:

Возвращаемое значение функции - C++
Добрый день. Есть функция: TextString InfoBox::name(unsigned int i) const { if(i&lt;this-&gt;count()) { TextLabel...

Возвращаемое значение функции - C++
array&amp; array::operator = (const array &amp;q) { if (this != &amp;q) { delete s; s=new int; for(len=0;len&lt;q.len;s=q.s,len++) ...

Возвращаемое значение функции - C++
void tokenize(string str_translate){ char char_translate; strcpy(char_translate, str_translate.c_str()); // string to char* ...

Возвращаемое значение функции - C++
Здравствуйте Я тут новенький. Очень трудно у вас проходить регистрацию. У меня вопрос по С++ Компилятор: Code Blocks ...

Возвращаемое значение функции - массив - C++
Здравствуйте, Друзья. Скажите пожалуйста - из функции одномерный массив можно передать в функцию main() или нет? Если да - как. За...

Возвращаемое значение virtual функции - C++
В инструкции указанно следующее virtual int getHost() создаю у себя в классе int getHost(){ return ?? }

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Шерсть-На-Носу
40 / 40 / 1
Регистрация: 30.01.2009
Сообщений: 168
15.05.2009, 11:28     Возвращаемое значение функции #2
В строчках

Код
printf("Midlle ariphemetic is %d",sr);
fprintf(OutputFile,"Midlle ariphemetic is %d",sr);
спецификатор типа не соответствует типу переменной. Вместо %d поставь %f.
Lil Crazy
6 / 6 / 1
Регистрация: 23.03.2009
Сообщений: 198
15.05.2009, 11:44  [ТС]     Возвращаемое значение функции #3
Да ладно :-) разве только в этом??? может я массив не передал??? Или что-то еще??????
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
15.05.2009, 12:47     Возвращаемое значение функции
Еще ссылки по теме:

Неправильное возвращаемое значение функции time - C++
что за бардак мне time возвращает??? что типа щас 10 месяц, а год вообще 114 :D пишу так: time_t t; time(&amp;t); tm tt; ...

Шаблон с переменным числом аргументов, и возвращаемое значение функции - C++
Здравствуйте! Использую С++11. Хочу возвращать элементы кортежа пытаюсь так, auto Deserialize(unsigned long long i) -&gt;...

Возвращаемое значение функции - указатель на массив. КАК это записать? - C++
Функция заполняет массив. например (кусок проги) .... int mas; int fun() { заполнила массив

Возвращаемое значение - C++
Как сделать так, что бы в зависимости от подаваемых аргументов, функция возвращала разные значения? Пробовал через шаблоны, но не...


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

Или воспользуйтесь поиском по форуму:
Patch
2276 / 491 / 11
Регистрация: 01.04.2009
Сообщений: 2,178
15.05.2009, 12:47     Возвращаемое значение функции #4
Цитата Сообщение от Lil Crazy Посмотреть сообщение
Да ладно :-)
может и ладно, но и этого хватат.
а вообще, зачем такое извращение - массив указателей?
не проще сразу объявить квадратную матрицу??
А не работает как надо, потому, что у тебя в функции SortMatrix обход почему-то начинается с элемента W[1][1].
первая строка и колонка отсекаются полностью.
должно быть так:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
float SortMatrix(int **W, const int L)
{
        int i,j;
        int k=0;
        float sr=0;
        for (i=0;i<L;i++)
        {
                for (j=0;j<L;j++)
                {
                        if (((j<i) && (j<L-i-1)) || ((j>i) &&(j>L-i-1)))
                        {
                                k=k+1;
                                sr=sr+W[i][j];
                        }
                }
        }
        sr=sr/k;
    return sr;
}
Yandex
Объявления
15.05.2009, 12:47     Возвращаемое значение функции
Ответ Создать тему
Опции темы

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