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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Рекурсия, функции, потоковый ввод вывод или с клав 
:(
    Опции темы
lerenia
Дата 9.5.2013, 19:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Программа должна по выбору пользователя осуществлять ввод исходной матрицы с клавиатуры или из файла. Для этого программа должна содержать две соответствующие функции, указатель на одну из которых необходимо передавать в функцию для вычисления элементов массива Х. Данная функция должна вызывать через указатель одну из функций ввода элементов матрицы, производить вычисление элементов массива X в соответствии с заданием и возвращать указатель на этот массив. Кроме того, программа должна содержать функцию для вывода на экран и в файл исходной матрицы и результирующего массива, а также рекурсивную функцию определения в соответствии с заданием величины Y.
В программе не должно быть глобальных переменных.
Вот моя задача: Дана матрица А(5х5). Определить массив Х из 5 элементов, каждый из которых равен 1, если сумма модулей элементов соответствующего столбца больше наибольшего по модулю элемента матрицы и –1 в противном случае. Определить величину Y, как сумму положительных элементов первой строки матрицы, расположенных после первого нулевого элемента.
я попыталась с этими потоками разобраться вот что получилось, правда до конца дописать так и не смогла там ошибка 

Код

#include<stdio.h>
#include <conio.h>
#include<locale.h>
#include <math.h>
#define n 3
void input_keyboard(int a[n][n])//Ввод с клавиатуры
{
    int i,j;
    printf("Введите элементы матрицы А: \n");
    for (int i=0; i<n; i++)
        for (int j=0; j<n; j++)
            scanf ("%d", &a[i][j]);
}
void input_file(int(*a)[n])//Ввод из файла
{    
    FILE *fp;
    fp=fopen("lab3.txt","r");
    if (fp)
    {
        for (int i=0;i<n; i++)
            for(int j=0; j<n; j++)
                fscanf(fp, "%d",&a[i][j]);
        fclose(fp);
    }
}
int form_x(int a[n][n], void (*pf)(int [n][n]))//формирую массив х(нахожу максимум сумму столбцов, и сравнить!!!!)
{
    int sum[n], max,i,j;
    static int x[n];
    pf(a);
    max=abs(a[0][0]);//нахождение максимального элемента матрицы
    for ( i=0; i<n; i++)
        for ( j=0; j<n; j++)
            if (abs(a[i][j]) > max)
                max=abs(a[i][j]);
    for ( j=0; j<n; j++)//сумма элеменов столбцов
    {
        sum[j]=0;
    for ( i=0; i<n; i++)
        sum[j]=sum[j]+a[i][j];
    sum[j]=abs(sum[j]);
    }
    for ( j=0; j<n; j++)
        if (sum[j]>max) x[j]=1;
        else x[j]=-1;
        return *x;
}
void output(const int x[], const int a[][n] )
{
   int i,j;
   printf("Матрица А:\n");
   for (i=0;i<n;i++)
   {
     for (j=0;j<n;j++)
       printf("%5d",a[i][j]);
       printf("\n");
   }
printf("Массив Х:\n");
for (j=0;j<n;j++)
printf("%5d",x[j]);
printf("\n");
}
int main()
{
setlocale(LC_CTYPE,"");
int a[n][n], x[n], c;
void (*pfunc)(int [n][n]);
do
{
printf("Ввод матрицы:\n1 - с клавиатуры\n2 - \
из файла\n");
scanf("%d",&c);
}
while (c!=1 && c!=2);
// Присваивание указателю адреса одной из функций:
switch (c)
{
case 1: pfunc=&input_keyboard;
break;
case 2: pfunc=&input_file;
}
output(form_x(a,x,pfunc),a);
_getch();
}


Язык написания - Си
PM MAIL   Вверх
Ordiday
Дата 10.5.2013, 01:34 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











какая именно ошибка ?

Этот ответ добавлен с нового Винграда - http://vingrad.com
  Вверх
lerenia
Дата 10.5.2013, 22:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Ordiday, 
раньше выдавал ошибку что файла текстового не существует(ноя его честное слово создавала) вот посидела денек вышел следующий код 
Код

#include<stdio.h>
#include <conio.h>
#include<locale.h>
#include <math.h>
#define n 3
//Функция вода элементов матрицы с клавиатуры
void input_matr(int a[n][n])
{
    int i,j;
    printf("Введите элементы матрицы А:  \n");
    for (i=0; i<n; i++)
        for (j=0; j<n; j++)
            scanf("%d", &a[i][j]);
}
//Функция заполнения матрицы 
void input_file (int (*a)[n])
{
    int i,j;
    FILE*file;
    file=fopen("c:\\matr.txt", "r");
    if (file)
    {
        for (i=0;i<n; i++)
            for(j=0;j<n;j++)
                fscanf(file,"%d",&a[i][j]);
        fclose(file);
    }
}
//функция вычисления элементов мссива х
int *mas_x(int(*a)[n],int *x, void (*pfunc)(int [n][n]))
{
    pfunc(a);
    int sum[n], max,i,j;
    static int x[n];
    pfunc(a);
    max=abs(a[0][0]);//нахождение максимального элемента матрицы
    for ( i=0; i<n; i++)
        for ( j=0; j<n; j++)
            if (abs(a[i][j]) > max)
                max=abs(a[i][j]);
    for ( j=0; j<n; j++)//сумма элеменов столбцов
    {
        sum[j]=0;
    for ( i=0; i<n; i++)
        sum[j]=sum[j]+a[i][j];
    sum[j]=abs(sum[j]);
    }
    for ( j=0; j<n; j++)
        if (sum[j]>max) x[j]=1;
        else x[j]=-1;
        return *a;
}
//функция вывода матрицы а и х
void output(const int x[], const int a[][N] )
{
    int i,j;
    printf("Матрица А:\n");
    for (i=0;i<N;i++)
    {
        for (j=0;j<N;j++)
        printf("%5d",a[i][j]);
        printf("\n");
     }
    printf("Массив Х:\n");
    for (i=0;i<N;i++)
        printf("%5d",x[i]);
    printf("\n");
}
int main()
{
    setlocale(LC_CTYPE,"");
    int a[N][N], x[N], c;
    void (*pfunc)(int [N][N]);
    do
    {
        printf("Ввод матрицы:\n1 - с клавиатуры\n2 - \
               из файла\n");
        scanf("%d",&c);
    }
    while (c!=1 && c!=2);
    // Присваивание указателю адреса одной из функций:
    switch (c)
    {
    case 1: pfunc=&input_matr;
        break;
        case 2: pfunc=&input_file;
            }
    output(mas_x(a,x,pfunc),a);
    _getch();

int recurs(int p*, t, &sum)
{
    if (t==0)
        return 0;
    else sum=sum+recurs(p+1, t-1, sum);
}
}

PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Для новичков"
JackYF
bsa

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь


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

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


 




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


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

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