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

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

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


Донат для форума - использовать для поднятия настроения себе и модераторам

А ещё здесь можно купить рекламу за 15 тыс руб в месяц! ) пишите сюда - alarforum@yandex.ru

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

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

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


#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
Репутация: 15
По умолчанию

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

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

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

У меня проблема была как использовать две функции (до этого я одной 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
Репутация: 655
По умолчанию

Цитата:
З Ы Ы код на транспонирование работает
Неправильно работает. Точнее, правильно, но делать с таким кодом Ваше задание - убьётесь.
Передавайте 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
Репутация: 6
По умолчанию

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

Типы аргументов. То есть, скажем:
Код:
//Аргумент 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 вне форума   Ответить с цитированием
Ответ

Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

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


03:39.


Powered by vBulletin® Version 3.8.11
Copyright ©2000 - 2019, Jelsoft Enterprises Ltd.