Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 30.10.2012, 00:40   #1
Doubt
Пользователь
 
Аватар для Doubt
 
Регистрация: 19.06.2011
Сообщений: 10
По умолчанию Builder C++ Матрица

Дана целочисленная прямоугольная матрица, определить сумму элементов в тех строках, которые не содержат отрицательных элементов.
Код программы:
Код:
void __fastcall TForm1::Button1Click(TObject *Sender)
{
N=StrToFloat(Edit1->Text);
Form1->StringGrid1->ColCount=N+1;
Form1->StringGrid1->RowCount=N+1;
Form1->StringGrid1->Cells[0][0]="¹";
matr=new int *[N];
for (i=0; i<N; ++i)
for (j=0; j<N; ++j)
{
matr[i]=new int [N];
Form1->StringGrid1->Cells[i+1][0]=i+1;
Form1->StringGrid1->Cells[0][j+1]=j+1;
Form1->StringGrid1->Cells[i+1][j+1]=random(15) - 5;
}
for (i=1;i<N;i++)
for (j=1;j<N;j++)
{
matr[i][j]=StrToInt(StringGrid1->Cells[i+1][j+1]);
}
for(i=1;i<N;i++)
 {
 n=0;
 for(j=1;j<N;j++)
     if (matr[i][j]>=0)
      {
   n++;
   if (n==N)
{
for (j=1; j<N; j++)
S+=matr[i][j];}

      }
      }
Edit2->Text=n;
      Edit2->Text= S;
}
пропускает 1-е столбец и строчку (отсчёт строчек и столбцов с 0-я, у меня указано начать с 1-ы, а начинает с 2-х). В коде идет подсчет строк без отрицательных элементов, считает неправильно, объясните, пожалуйста, почему?..
Всё пройдет, даже моё невежество в элементарном.
Doubt вне форума Ответить с цитированием
Старый 30.10.2012, 01:08   #2
Murashov
Форумчанин
 
Аватар для Murashov
 
Регистрация: 30.10.2012
Сообщений: 121
По умолчанию

Я бы так сделал (на C):
Код:
#include <stdlib.h>
#include <stdio.h>
#include <math.h>
#include <conio.h>
int main()
{
    const int I=4,J=7;
    int mas[I][J], i=0,j=0,step=10,f=0,sum=0;
    for(i=0;i<I;i++)
    {
        for(j=0;j<J;j++)
        {
            mas[i][j]=step;
            printf("%d\t", mas[i][j]);
            step--;
        }
        printf("\n");
    }
    printf("\n\n");
    for(i=0;i<I;i++)
    {
        for(j=0,f=1, sum=0;j<J;j++)
        {
            if(mas[i][j]<0) f=0;
            sum+=mas[i][j];
        }
        if(f) printf("str %d. sum=%d\n", i, sum);
    }
    getch();
    return 0;
}

Последний раз редактировалось Murashov; 30.10.2012 в 01:13.
Murashov вне форума Ответить с цитированием
Старый 30.10.2012, 12:16   #3
rmv240899
Форумчанин
 
Регистрация: 18.02.2012
Сообщений: 155
По умолчанию

Как-то так должно быть (в консольном С++):
Код:
#include <iostream>
using namespace std;
int main(){
    int matr[][] = { ... };
    //заполнение ... 
    int countstr = 0;
    bool isPositiveStr[row];
    //... заполняем isPositiveStr значениями true;
    for(int i = 0; i<row; i++){
        for(int j = 0; j<col; j++){
             if(matr[i][j]<0){
                  isPositiveStr[i] = false;
                  countStr++;
                  break;
             }
        }
    }
    countStr = row-countStr;
    int * summ = new int[countStr];
    for(int i = 0; i<row; i++){
        if(isPositiveStr[i]){
             for(int j = 0; j<col; j++){
                 summ[i] += matr[i][j];
             }
        }
    }
    // ... Вывод ...
    // ... Очистка памяти ...
}
С потолка.
rmv240899 вне форума Ответить с цитированием
Старый 30.10.2012, 17:59   #4
Doubt
Пользователь
 
Аватар для Doubt
 
Регистрация: 19.06.2011
Сообщений: 10
По умолчанию

он считает, но неизвестно что )
то есть выдает неверную строчку, правда, не всегда.
Всё пройдет, даже моё невежество в элементарном.
Doubt вне форума Ответить с цитированием
Старый 30.10.2012, 18:08   #5
Murashov
Форумчанин
 
Аватар для Murashov
 
Регистрация: 30.10.2012
Сообщений: 121
По умолчанию

А почему циклы от 1 идут? ведь массив нумеруется от 0. И чем мой пример не устраивает?
Murashov вне форума Ответить с цитированием
Старый 30.10.2012, 22:14   #6
Doubt
Пользователь
 
Аватар для Doubt
 
Регистрация: 19.06.2011
Сообщений: 10
По умолчанию

потому что [0][1] и [1][0] у меня заняты под нумерацию элементов массива, поэтому цикл начинается с 1-цы.
Мои циклы пропускают или 1-е строчку со столбцом, либо последние.
Всё пройдет, даже моё невежество в элементарном.

Последний раз редактировалось Doubt; 30.10.2012 в 22:18.
Doubt вне форума Ответить с цитированием
Старый 30.10.2012, 22:17   #7
Doubt
Пользователь
 
Аватар для Doubt
 
Регистрация: 19.06.2011
Сообщений: 10
По умолчанию

using namespace std и isPositiveStr[row] - это что? Второе - это ведь логическая переменная, вот только почему isPositiveStr[row], а не просто к-л буква? Я с логическими не дружу )
Всё пройдет, даже моё невежество в элементарном.
Doubt вне форума Ответить с цитированием
Старый 30.10.2012, 22:23   #8
Murashov
Форумчанин
 
Аватар для Murashov
 
Регистрация: 30.10.2012
Сообщений: 121
По умолчанию

Код:
using namespace std
- для cout и cin на сколько я знаю.. но не уверен, не пользуюсь ими + это что-то связанное с объектами.. тоже пока не дошёл до них
Murashov вне форума Ответить с цитированием
Старый 30.10.2012, 22:26   #9
Doubt
Пользователь
 
Аватар для Doubt
 
Регистрация: 19.06.2011
Сообщений: 10
По умолчанию

ой. я этого не знаю тогда, спасибо )
Всё пройдет, даже моё невежество в элементарном.
Doubt вне форума Ответить с цитированием
Старый 30.10.2012, 22:30   #10
Helloween
Форумчанин
 
Регистрация: 24.04.2012
Сообщений: 300
По умолчанию

namespace - это пространство имен, в основном используются для того, чтобы названия переменных не пересекались. Можно объявить как именованной так и не именованное. Для того, чтобы обратится к функциям и переменным в пространстве имен в нормальных компиляторах нужно писать через 2 двоеточия std::endl например, чтобы этого не делать и пишут using namespace mynamespace. в общих чертах.
Помог? Оставляем отзыв =)
Helloween вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
CodeGear C++ Builder 2007 Lite не может откомпилировать исходники C++ Builder 6 Ecosasha C++ Builder 2 22.11.2013 15:02
Матрица в Builder C++ Doubt Помощь студентам 2 23.10.2012 18:04
Непонятки с DirectX (матрица поворота, камера, матрица проекции) ROD Общие вопросы C/C++ 2 17.09.2010 17:00
TurboPascal: граф, матрица смежности и матрица инцидентности. ulala Помощь студентам 0 02.12.2009 10:11
Квадратная матрица [C++Builder] conqueror Помощь студентам 1 28.10.2008 11:11