Модераторы: Daevaorn

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Матрицы от 16 элементов и более 
:(
    Опции темы
Ufyljy
  Дата 19.10.2007, 10:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 61
Регистрация: 5.10.2007

Репутация: нет
Всего: 1



Вообщем я не в тему  smile В том смысле, что программа обучения не дошла до матриц, а мне-таки интересно двигать чуть дальше. 
Вот. Познакомился с матрицами из 9 элементов, написал программу на Си.

Хочу научиться решать матрицы от 4х4 и более и далее. Буду очень благодарен если объясните тему, а я и попробую программу написать.

Код

/* -_-_ Создано: 16.10.2007
                 Автор: 
        Дополнения: 
                    Коррекции:
        Благодарности: wils0n, DjoNIK, FREEDEV, Kuvaldis, Lazin
*/

#include<stdio.h>
#include<conio.h>
#define br putchar('\n');
#define hr printf("-------------------------------------------------------------");

int main()
{
    int b; printf("Enter b: "); scanf("%d",&b); br;
    int a[b][b];
    
    int c=0,i,k,l,m,x3,x2;
    int d[b],e[b];

    // Заполнение массивом d,e нулями
    for(i=0; i<b; i++) {e[i]=0; d[i]=0;}
             
    // Заполнение двумерного массива     
    for(i=0; i < b; i++)
    {                      
               for(k=0; k < b; k++)
               {
                        printf("Enter a[%d][%d]: ",i,k);
                        scanf("%d",&a[i][k]);
               }
               br;
      
      }

      for(i=0; i < b; i++)
      {                      
               for(k=0; k < b; k++)
               {
                        c+=a[i][k];
                        d[i] += a[i][k];
                        e[i] += a[k][i];//сумма столбца
               }
      }
      
      // Вывод двумерного массива
      for(i=0; i < b; i++)
      {
               br;
               for(k=0; k < b; k++)
               {
                        printf("%d ",a[i][k]);
               }
      }
      
      br; hr; br;
      
      // Вывод общей суммы столбцов
      printf("Summa vseh chisel: %d",c);
      
      br;
      
     // Вывод суммы каждой строки
      printf("Summa kajdoy stroki: ");
      for(l=0; l < b; l++){printf("%d ",d[l]); }
      br;
     // Вывод суммы каждого столбца
      printf("Summa stolbca: ");
      for(m=0; m < b; m++){printf("%d ",e[m]); } 
      
      br;
      
      // Расчет матриц
      if(b==3)
      {
           x3=(a[0][0]*a[1][1]*a[2][2])+(a[1][0]*a[0][2]*a[2][1])+(a[0][1]*a[1][2]*a[2][0])-(a[0][2]*a[1][1]*a[2][0])-(a[0][1]*a[1][0]*a[2][2])-(a[0][0]*a[2][1]*a[1][2]);    
           printf("Matrix: %d",x3);
      }
      else br;

getch();
} 

 
PM MAIL   Вверх
akizelokro
Дата 19.10.2007, 12:01 (ссылка) |   (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Крокодил
**


Профиль
Группа: Участник
Сообщений: 761
Регистрация: 30.7.2007

Репутация: 1
Всего: 5



Ну, код в принципе должен быть работоспособным. 
Посмотри на свою программу и найди самую длинную строку. Если она такого размера, как в твоей программе, попробуй ее заменить на соответствующую функцию. Вообще, там у тебя реализуется (не проверял) формула. Найди в интернете ее, она работает для матриц произвольного размера и оформь ее как вот эту самую функцию в твоей программе. Лучше, чем в учебнике или справочном пособии, я тебе все равно ее не объясню.


--------------------
a = a + b; b = a - b; a = a - b;
PM MAIL   Вверх
Ln78
Дата 19.10.2007, 12:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 274
Регистрация: 25.11.2006

Репутация: 13
Всего: 15



Цитата(Ufyljy @  19.10.2007,  10:58 Найти цитируемый пост)
    
Код

 int b; printf("Enter b: "); scanf("%d",&b); br;
    int a[b][b];


Цитата(akizelokro @  19.10.2007,  12:01 Найти цитируемый пост)
Ну, код в принципе должен быть работоспособным. 


Я отстал от жизни? smile 

Это сообщение отредактировал(а) Ln78 - 19.10.2007, 12:41
PM MAIL   Вверх
akizelokro
Дата 19.10.2007, 12:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Крокодил
**


Профиль
Группа: Участник
Сообщений: 761
Регистрация: 30.7.2007

Репутация: 1
Всего: 5



Цитата

Я отстал от жизни?   smile 


Вообще-то, (ядовито)

Код

#define br putchar('\n');


например, в сочетании с выводом в html
Код

printf("%s","something else about style of coding ... long string<br>");


и прочие замечания об осторожном обращении с макросами я не стал отписывать. Кстати, это 
Код

#define br 

должно было броситься тебе в глаза раньше.
Но что бы хотелось отметить, что паренек заходит не с вопросом типа "Подскажите мне название оператора", ответ на который элементарно можно найти в любом учебнике или поисковике или "Напишите за меня прогу к курсовику". Он пришел вполне с рабочим отношением, что тебя хотя бы должно радовать на нашем общем фоне.
Кстати, код на Си.

Это сообщение отредактировал(а) akizelokro - 19.10.2007, 13:16


--------------------
a = a + b; b = a - b; a = a - b;
PM MAIL   Вверх
Ln78
Дата 19.10.2007, 13:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 274
Регистрация: 25.11.2006

Репутация: 13
Всего: 15



akizelokro, твои сентенции с выводом в html мне остались непонятны. 

Код

#define br putchar('\n');

в сравнении с использованием введённой сканфом переменной для задания размерности массивов, ИМХО, соринка по сравнению с бревном. Собственно, к "пареньку" претензий особо не было. А вот ты, раз уж развил такую высокую активность, мог бы повнимательнее смотреть и критичнее оценивать свои посты и целесообразность их размещения здесь. Ничего личного, просто это ведёт к понижению уровня форума.

Это сообщение отредактировал(а) Ln78 - 19.10.2007, 13:13
PM MAIL   Вверх
akizelokro
Дата 19.10.2007, 13:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Крокодил
**


Профиль
Группа: Участник
Сообщений: 761
Регистрация: 30.7.2007

Репутация: 1
Всего: 5



Цитата

Ничего личного, просто это ведёт к понижению уровня форума.

У меня просто род интернет-аддикции. Я считаю, что меня действительно нужно замодерировать раз иокончательно, что пойдет мне только на пользу (без обид).
Если тебе не нравится пример с формированием html-файла, то рассмотри другую конструкцию, 
Код

#define br putchar('\n');
break;

и откомпилируй ее.
Правильность примера с вводом размерности массива через scanf в Сишнике, как написано у автора темы прямым текстом (а не надпись "код С++", которая проставляется автоматически) я оставлю на своей совести.

Это сообщение отредактировал(а) akizelokro - 19.10.2007, 13:48


--------------------
a = a + b; b = a - b; a = a - b;
PM MAIL   Вверх
Ufyljy
Дата 20.10.2007, 09:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 61
Регистрация: 5.10.2007

Репутация: нет
Всего: 1



Что это за приколы, гугл тоже постит  smile 
Народ, можете мне объяснить: что в этом страшного, если я задаю размер массива из переменной?
Программа компилируется, даже не глючит.

Константы... ну в общем списочек моих констант включает еще немало тегов html
А что в этом страшного?

Объясните, буду очень очень, объясните

Добавлено через 10 секунд
Что это за приколы, гугл тоже постит  smile 
Народ, можете мне объяснить: что в этом страшного, если я задаю размер массива из переменной?
Программа компилируется, даже не глючит.

Константы... ну в общем списочек моих констант включает еще немало тегов html
А что в этом страшного?

Объясните, буду очень очень, объясните
 
PM MAIL   Вверх
zkv
Дата 20.10.2007, 10:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата



****


Профиль
Группа: Участник Клуба
Сообщений: 2133
Регистрация: 23.7.2006
Где: Санкт-Петербург

Репутация: 26
Всего: 92



Цитата(Ln78 @  19.10.2007,  13:12 Найти цитируемый пост)
в сравнении с использованием введённой сканфом переменной для задания размерности массивов

я тоже офигел, когда увидел в первый раз, но говорят под некоторыми компиляторами так работает. smile
Цитата(Ufyljy @  20.10.2007,  09:51 Найти цитируемый пост)
Народ, можете мне объяснить: что в этом страшного, если я задаю размер массива из переменной?

такие конструкции компилятор поддерживать не обязан, например, если ты попробуешь такой фокус с VC++ ничего не выйдет.
Цитата(Ufyljy @  20.10.2007,  09:51 Найти цитируемый пост)
Константы... ну в общем списочек моих констант включает еще немало тегов html
А что в этом страшного?

в том то и дело, что это макросы, а не константы. Есть вероятность, что когда ошибешься - будешь очень долго ошибку искать
PM MAIL   Вверх
Ufyljy
  Дата 20.10.2007, 11:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 61
Регистрация: 5.10.2007

Репутация: нет
Всего: 1



Например, у меня работает  smile  Ясно, больше не буду так делать.

если #define макрос, то что константа?

Это сообщение отредактировал(а) Ufyljy - 20.10.2007, 11:51
PM MAIL   Вверх
Ln78
Дата 20.10.2007, 12:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 274
Регистрация: 25.11.2006

Репутация: 13
Всего: 15



zkv, я тоже на этом форуме встречал беглое упоминание на эту тему (поэтому в своём первом посте выразил сомнение в вопросительной форме). Хотелось бы узнать, какие компиляторы поддерживают такое определение переменных и механизм реализации (память выделяется динамически, а не на этапе трансляции?)
PM MAIL   Вверх
Ufyljy
Дата 20.10.2007, 17:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 61
Регистрация: 5.10.2007

Репутация: нет
Всего: 1



DevCpp поддерживает
PM MAIL   Вверх
DjoNIK
Дата 20.10.2007, 18:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 320
Регистрация: 28.9.2006
Где: Питер/Георгиевск

Репутация: 4
Всего: 5



На код
Код

#include <iostream>

int main(void)
{
int i;
std::cin>>i;
int arr[i];
for(int j=0; j<i; j++)
{
    arr[j] = j;
}

for(int j=0; j<i; j++)
{
    std::cout<<arr[j];
}

return 0;
}

2005 студия сказала:
Код

e:\progects\foo\foo\main.cpp(7) : error C2057: expected constant expression
e:\progects\foo\foo\main.cpp(7) : error C2466: cannot allocate an array of constant size 0
e:\progects\foo\foo\main.cpp(7) : error C2133: 'arr' : unknown size

MinGW Developer Studio 2.05 без каких-либо изменения опций при компиляции (скачал/запустил):
Код

Compiling source file(s)...
main.cpp
Linking...

main.exe - 0 error(s), 0 warning(s)



--------------------
- Плесни-ка мне холодного кипятку.
- Как кипяток может быть холодным?! Ты, верно, хочешь кипяченой воды?
- Какая ещё кипяченая вода? Не пудри мне мозги - налейхолодного кипятку.
(разговор петербуржца и москвича)
PM MAIL ICQ   Вверх
Ufyljy
Дата 22.10.2007, 10:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 61
Регистрация: 5.10.2007

Репутация: нет
Всего: 1



Подумал, и написал прогу для расчета матриц из 16 элементов. Не знаю, верно ли это (скажите, если че), т.к. никуда не обращался, и никаких универсальных функций не находил. Давайте пожалуйста конкретные ссылки, так всем удобней.

Это сообщение отредактировал(а) Ufyljy - 22.10.2007, 10:16
PM MAIL   Вверх
SergeCpp
Дата 22.10.2007, 11:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


 
**


Профиль
Группа: Участник
Сообщений: 955
Регистрация: 8.8.2005
Где: At Home

Репутация: 15
Всего: 124



The following example demonstrates how to use C99 Variable Length Arrays (VLAs)

Код
void f(int m, int C[m][m])
{
    double v1[m];
    ...


PM MAIL WWW ICQ   Вверх
Ln78
Дата 22.10.2007, 12:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 274
Регистрация: 25.11.2006

Репутация: 13
Всего: 15



DjoNIK, Ufyljy, SergeCpp, спасибо за ответ и за ссылку. А можно побольше узнать об этом нововведении: такая запись реализуется как скрытое выделение/освобождение динамической памяти? А если в размерности указана константа, то переменная стековая? И сравнивал ли кто-нибудь эффективность (по быстродействию) для такого рода выделения памяти (желательно на примере, где сборка мусора не была бы совсем уж тривиальной, типа много раз выделил и освободил один и тот же объём памяти)?
PM MAIL   Вверх
SergeCpp
Дата 22.10.2007, 13:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


 
**


Профиль
Группа: Участник
Сообщений: 955
Регистрация: 8.8.2005
Где: At Home

Репутация: 15
Всего: 124



Ну, это не такое уж нововведение — "It was adopted as an ANSI standard in March 2000"

Почитайте вот тут вот сначала

А вот тут ссылки на стандарт

А вот тут статья небольшая


Это сообщение отредактировал(а) SergeCpp - 22.10.2007, 13:56
PM MAIL WWW ICQ   Вверх
Страницы: (2) [Все] 1 2 
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0573 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.