Форум программистов, компьютерный форум, киберфорум
C для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.67/3: Рейтинг темы: голосов - 3, средняя оценка - 4.67
0 / 0 / 0
Регистрация: 08.04.2012
Сообщений: 35
1

Найдите ошибку,не вычисляет произведение на С двумерный массив.

08.04.2012, 21:24. Показов 563. Ответов 6
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Задача почти готова но не находит произведение.Условие:Вычислить произведение положительных элементов матрицы, расположенных на главной диагонали и выше ее. Вот что сумел сделать:
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
//---------------------------------------------------------------------------
 
#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
#include <math.h>
//---------------------------------------------------------------------------
int main()
{  int n,i,j;
   float s;
   int t[25][25];
   printf("Vvod kol-va elementov\n");
   scanf("%d",&n);
   s=1;
   randomize();
    for (i = 0; i < n; i++)
     {
    for (j = 0; j < n; j++)
    {
    t[i][j]=random(41)-20;
    printf ("%4d",t[i][j]);
    }
    printf("\n");
    }
    for (i = 0; i < n; i++)
    for (j = 0; j < n; j++)
    {   if((t[i][j]>0) &&  (j>=i))
    {s*=t[i][j];}
    }
    printf("Proizvedenie=%d",s);
    getch();
    return 0;
}
//---------------------------------------------------------------------------
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
08.04.2012, 21:24
Ответы с готовыми решениями:

Найдите ошибку в программе, сдвигающей массив
#include &lt;stdio.h&gt; #include &lt;stdlib.h&gt; int main() { int a,b; int c; ...

Двумерный массив, найдите ошибку!
Во входном файле задан двумерный массив и целое число К . Заменить все элементы, меньшие К , этим...

помогите не пойму в чем проблема компилятор не выдает ошибку,но не вычисляет произведение
задача:1) Дан массив A. Вычислить произведение между первым и последним положительными элементами....

Найдите ошибку, неправильно выводится произведение
7.1 Дан массив из N элементов (вещественные числа). Вы- числить: 1) сумму отрицательных элементов...

6
54 / 54 / 9
Регистрация: 24.09.2011
Сообщений: 149
08.04.2012, 21:47 2
Цикл, в котором идет умножение логичнее было бы сделать вот так:

C
1
2
3
4
for (i = 0; i < n; i++)
        for (j = i; j < n; j++)
            if(t[i][j]>0)
                s*=t[i][j];
Тогда не придется бегать по всей матрице. Будем делать обход только тех элементов, которые либо на диагонали, либо выше неё.

Все верно считает, только по всей видимости размера переменной типа float(переменная s) не хватает для хранения такого длинного числа, которое получается при произведении. Либо нужно брать тип, который сможет хранить такое число, либо числа в матрице подбирать поменьше))

А так все правильно!
1
0 / 0 / 0
Регистрация: 08.04.2012
Сообщений: 35
08.04.2012, 22:09  [ТС] 3
Цитата Сообщение от Merovingian Посмотреть сообщение
Цикл, в котором идет умножение логичнее было бы сделать вот так:

C
1
2
3
4
for (i = 0; i < n; i++)
        for (j = i; j < n; j++)
            if(t[i][j]>0)
                s*=t[i][j];
Тогда не придется бегать по всей матрице. Будем делать обход только тех элементов, которые либо на диагонали, либо выше неё.

Все верно считает, только по всей видимости размера переменной типа float(переменная s) не хватает для хранения такого длинного числа, которое получается при произведении. Либо нужно брать тип, который сможет хранить такое число, либо числа в матрице подбирать поменьше))

А так все правильно!
А почему он вычисляет иногда отрицательное произведение?
0
54 / 54 / 9
Регистрация: 24.09.2011
Сообщений: 149
08.04.2012, 22:45 4
Цитата Сообщение от Филипп94 Посмотреть сообщение
А почему он вычисляет иногда отрицательное произведение?
Попробую ответить на ваш вопрос следующим кодом

C
1
2
3
short int a=32767;
a=a+1;
printf("%d",a);
Какой будет ответ?

В двоичной записи число сейчас выглядит следующим образом

a = 0111111111111111 = 32767

Если прибавить к нему еденичку, то все единицы обнулятся и одна единичка пойдёт в старший разряд, который отвечает за знак.
Таким образом:

a = 0111111111111111 = 32767
a+1 = 1000000000000000 = -32768

Я ответил на ваш вопрос?
0
0 / 0 / 0
Регистрация: 08.04.2012
Сообщений: 35
08.04.2012, 22:48  [ТС] 5
Цитата Сообщение от Merovingian Посмотреть сообщение
Попробую ответить на ваш вопрос следующим кодом

C
1
2
3
short int a=32767;
a=a+1;
printf("%d",a);
Какой будет ответ?

В двоичной записи число сейчас выглядит следующим образом

a = 0111111111111111 = 32767

Если прибавить к нему еденичку, то все единицы обнулятся и одна единичка пойдёт в старший разряд, который отвечает за знак.
Таким образом:

a = 0111111111111111 = 32767
a+1 = 1000000000000000 = -32768

Я ответил на ваш вопрос?
А как мне сделать так что бы убрать минус?
0
1 / 1 / 2
Регистрация: 07.12.2011
Сообщений: 46
09.04.2012, 10:19 6
ку ку филя
1
347 / 292 / 37
Регистрация: 23.03.2012
Сообщений: 838
09.04.2012, 10:23 7
Цитата Сообщение от Филипп94 Посмотреть сообщение
А как мне сделать так что бы убрать минус?
signed long long s;
Или unsigned long long s и отдельно хранить знак.
1
09.04.2012, 10:23
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
09.04.2012, 10:23
Помогаю со студенческими работами здесь

Двумерный массив. Поиск нулей.Не могу найти ошибку ошибку в коде
Вот,например массив 5 5 0 1 0 1 0 1 1 1 1 1 0 0 0 0 1 0 0 1 0 0 1 0 0 0 0 считываются два...

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

Создайте двумерный массив целочисленный массив А[1..10], [1..7] и найдите сумму всех его элементов имеющие оба нечетные индексы.
Создайте двумерный массив целочисленный массив А, и найдите сумму всех его элементов имеющие оба...

Дан двумерный массив А. Найдите К = (max + min)/2
1. Дан двумерный массив А. Найдите К = (max + min)/2, где max – это наибольший элемент массива, а...


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

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru