Форум программистов
 
Контакты: о проблемах с регистрацией, почтой и по другим вопросам пишите сюда - alarforum@yandex.ru, проверяйте папку спам! Обязательно пройдите активизацию e-mail.

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

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


Ответ
 
Опции темы
Старый 23.04.2013, 19:16   #1
igole
 
Регистрация: 14.12.2012
Сообщений: 8
По умолчанию Ну не работает и все тут

Здравия всем. Я в С++ новичек. Но тем не менее пытаюсь выполнить кое-какие задачи. И вот одна из них.... Я совмещаю две функции, но они никак не работают вместе. Поправьте код (в коде имеется задание)
Вложения
Тип файла: txt Исходный код.txt (1.0 Кб, 122 просмотров)
igole вне форума Ответить с цитированием
Старый 24.04.2013, 10:30   #2
Abstraction
Старожил
 
Аватар для Abstraction
 
Регистрация: 25.10.2011
Сообщений: 3,178
По умолчанию

*жалобно*
А сюда выложить? Не всем хочется скачивать невесть что.
Код:
// код не полный!!!


#include<iostream>
#include<math.h>
#include<iomanip>
using namespace std;

int transpose(){
    int t, n, i, j;
    cout<<"Задайте размеры квадратных матриц"<<endl;
    cin>>n;
    int matrix[n][n];
    for(i=0; i<n; i++)
    {
        for(j=i; j<n; j++)
        {
            t = matrix[i][j];
            matrix[i][j] = matrix[j][i];
            matrix[j][i] = t;
        }
    }
}
int main(){
    setlocale(LC_CTYPE, "rus");
    int i,j,n;
    cout<<"Программа вычисляет значение выражения A-(B*C^t)^t, где А,В,С - матрицы"<<endl;
    cout<<"Задайте размеры квадратных матриц"<<endl;
    cin>>n;
    cout<<"Введите элементы матрицы А (заполнение построчно)"<<endl;
    int a[n][n];
    for (i=0;i<n;i++)
    {
        for(j=0;j<n;j++)
        {
                        cin>>a[i][j];
        }
    }
    transpose(a);
    for(int i = 0; i < 5; ++i)
    {
        for(int j = 0; j < 5; ++j)
            cout << a[i][j]<<endl;
    }
    system("pause");
}
"Не работает" - эта фраза с равным успехом описывает ситуации "оно не скомпилировалось", "оно не запустилось", "оно запустилось, но упало", "оно запустилось, но работает как-то не так", "оно запустилось, но что-то мне не нравится", "оно запустилось и взяло мою систему в заложники". Ладно - последнее, положим, маловероятно. Но ограничение информации о проблеме фразой "не работает" никак не облегчает её решение.

Как уже сказано, при попытке это скомпилировать компилятор должен был выдать ошибку. Вы её получили? Вы её прочитали? Вы её поняли?
Abstraction вне форума Ответить с цитированием
Старый 24.04.2013, 15:08   #3
sVasilich
Форумчанин
 
Аватар для sVasilich
 
Регистрация: 16.12.2009
Сообщений: 224
По умолчанию

А почему у вас функция объявлена так

Код:
int transpose()
а вызывается с параметром?

Код:
transpose(a);
Очевидно, где-то здесь ему и не нравится.
Люди бывают 10 типов: те, кто понимают двоичную систему счисления, и те, кто не понимают...
sVasilich вне форума Ответить с цитированием
Старый 24.04.2013, 17:44   #4
igole
 
Регистрация: 14.12.2012
Сообщений: 8
По умолчанию

У меня проблема была как использовать две функции (до этого я одной main() пользовался). тут проблема решилась...

З Ы ну а что конкретно по заданию можете сказать (A-(B*C^t)^t, где А,В,С - матрицы)? Я вот даже не знаю как быть дальше

З Ы Ы код на транспонирование работает

Код:
#include<iostream>
#include<math.h>
#include<iomanip>
using namespace std;

int **a, n;

void transpose(){
    int t, i, j;
    for(i=0; i<n; i++)
    {
        for(j=i; j<n; j++)
        {
            t = a[i][j];
            a[i][j] = a[j][i];
            a[j][i] = t;
        }
    }
}
int main(){
    setlocale(LC_CTYPE, "rus");
    int i,j;
    cout<<"Программа вычисляет значение выражения A-(B*C^t)^t, где А,В,С - матрицы"<<endl;
    cout<<"Задайте размеры квадратных матриц"<<endl;
    cin>>n;
    cout<<"Введите элементы матрицы А (заполнение построчно)"<<endl;
	a = new int *[n];
	for (i=0; i<n; i++)
		a[i] = new int [n];

    for (i=0; i<n; i++)
    {
        for(j=0; j<n; j++)
			cin>>a[i][j];
    }

    transpose();

    for(i=0; i<n; i++)
    {
        for(j=0; j<n; j++)
            cout << a[i][j] << " ";
		cout << endl;
    }
    system("pause");
}
igole вне форума Ответить с цитированием
Старый 24.04.2013, 18:13   #5
Abstraction
Старожил
 
Аватар для Abstraction
 
Регистрация: 25.10.2011
Сообщений: 3,178
По умолчанию

Цитата:
З Ы Ы код на транспонирование работает
Неправильно работает. Точнее, правильно, но делать с таким кодом Ваше задание - убьётесь.
Передавайте a как аргумент функции transpose:
Код:
void transpose(int** a, int n){
  /*...*/
}

//...
//В main
int n;
//Ввод n
int** a;
//Инициализация и заполнение a
//Транспонирование a
transpose(a, n);
Обратите внимание, что Ваш код работает с квадратными матрицами, содержащими целочисленные элементы. Если с этим проблем нет, продолжаем.
Цитата:
З Ы ну а что конкретно по заданию можете сказать (A-(B*C^t)^t, где А,В,С - матрицы)? Я вот даже не знаю как быть дальше
Напишите функцию multiply_by(int**, int**, int), которая домножает первый аргумент (матрицу) на второй. Советы по написанию: создать функцию swap(int**, int**, int), которая меняет местами данные в первом и втором своём аргументе; в функции multiply_by создать третью (временную) матрицу, "собрать" в ней произведение, "обменять" функцией swap с первым аргументом и не забыть освободить память временной матрицы.
Напишите функцию subtract(int**, int**, int), которая вычитает из первого аргумента второй. Это вроде не должно вызвать проблем.
А дальше:
Код:
//Пусть a, b и c - уже введённые матрицы nxn.
transpose(c,n); //В c - c^t
multiply_by(b,c,n); //В b - b*c^t
transpose(b,n); //В b - (b*c^t)^t
subtract(a,b,n); //В a - a-(b*c^t)^t
//Вывести a
Abstraction вне форума Ответить с цитированием
Старый 24.04.2013, 19:07   #6
igole
 
Регистрация: 14.12.2012
Сообщений: 8
По умолчанию

Черт... Обидно то, что я половину не понял из написанного мне... Я понимаю что мысленно Вы меня посылаете, но.. объясните что означают int** и тп в скобках. Я на С++ начал писать с месяц как и для меня каждое задание как скачек в неизвестность
igole вне форума Ответить с цитированием
Старый 24.04.2013, 22:32   #7
Abstraction
Старожил
 
Аватар для Abstraction
 
Регистрация: 25.10.2011
Сообщений: 3,178
По умолчанию

Типы аргументов. То есть, скажем:
Код:
//Аргумент a (первый) имеет тип int** (указатель на указатель на int)
//Аргумент b (второй) имеет тип int**
//Аргумент size (третий) имеет тип int
//Функция принимает матрицы a и b размера size x size и записывает в a их произведение.
//Аргумент b не изменяется.
//Функция ничего не возвращает (void).
void multiply_by(int** a, int** b, int size){
  /* ... */
}
Сравните с:
Код:
//Аргумент command (первый) имеет тип const char* (указатель на неизменный char, он же неизменная текстовая строка)
//Функция принимает название системной команды в виде текстовой строки,
//выполняет её и по возможности возвращает код возврата выполненной команды.
//Гарантируется, что переданная строка не будет изменена.
int system(const char* command)
Abstraction вне форума Ответить с цитированием
Ответ

Здесь нужно купить рекламу за 20 тыс руб в месяц! ) пишите сюда - alarforum@yandex.ru
Без учёта ботов - 20000 человек в день, 350000 в месяц.

Опции темы


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Тут вам помогут найти все mihali4 Свободное общение 4 18.01.2012 15:50
А что вы все тут делаете? Вавел из ГМТУ Свободное общение 12 09.09.2009 00:17
кто угадает что тут не работает, скажу спасибо LLIYT БД в Delphi 3 11.06.2009 01:47