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

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

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 23.04.2009, 23:53   #1
tanek
Форумчанин
 
Регистрация: 07.03.2009
Сообщений: 209
По умолчанию Матрицы на языка Си

Добрый вечер! У меня возникла проблема с написанием программы, которая должна присваивать 1 максимальному элементу стоблца и -1 минимальному(матрица считывается и записывается в файл, а так же испольжуется динамическая память).Проблема в том что я не могу правильно реализавать сам процесс нахождения этих элементов и выведения матрицы в файл.
Код:
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
#define N 100;

void main ()
{
  FILE *fin,*fout;
  char input_name[100];
  int i,j;
  int string,column;
  int ** mass1;
  int ** mass2;
  int min=0;
  int max=0;

  string=column=0;
  printf("введите имя файла\n");
  gets(input_name);
  fin=fopen (input_name,"rt");
  if (fin==NULL){
    printf("Файл не найден.Конец программы\n");
    scanf(input_name);
    return;
    }
  fscanf (fin,"%d", &string);
  fscanf (fin,"%d", &column);
  mass1 = (int **)malloc(string*sizeof(int*));
  mass2 = (int **)malloc(column*sizeof(int*));

  for (i=0;i<string;i++)
    mass1[i] = (int*)malloc(column*sizeof(int));
  for (i=0;i<column;i++)
    mass2[i] = (int*)malloc(column*sizeof(int));

  printf("исходная матрица\n");
  for (i=0;i<string;i++)
    for (j=0;j<column;j++)
    {
      fscanf (fin,"%d", &mass1[i][j]);
      printf ("%d%c",mass1[i][j],(j<column-1)?' ':'\n');
    }
    {
    for (j=0;j<column;j++)
    {
      (min= mass1[1][j]);
      for (i=0;i<string;i++)
      {
       if (mass1[i][j]<=min){
	 min=mass1[i][j];}
      }
     }
     }
     for(i=0;i<string;i++)
     {
      if (mass1[i][j]==min)
      {mass1[i][j]=-1; }
      }
      for(i=0;i<column;i++)
	max=mass1[1][j];
	for(i=0;i<string;i++)
	 if(mass1[i][j]>=max)
	   max=mass1[i][j];
	for(i=0;i<string;i++)
	 if (mass1[i][j]==max)
	   mass1[i][j]=1;

      mass2[i][j]=mass1[i][j];

  printf("результаты программы сохранены в файле OUT.txt\n");
  printf("обработанная матрица: \n");
  fout=fopen("out.txt","wr");
  fprintf(fout,"обработанная матрица: \n");
  for (i=0;i<column;i++)
    for (j=0;j<string;j++)
    {
      fprintf(fout,"%d%c", "mass2[i][j]\n");
      printf("%d%c", "mass2[i][j]\n");
    }
  for(i = 0; i < string; i++)
    free(mass1[i]);
    free(mass1);
    for(i = 0; i < column; i++)
      free(mass2[i]);
      free(mass2);
      close(fin);
      close(fout);
      getch();
}
Зарание спасибо!!!!!
tanek вне форума Ответить с цитированием
Старый 24.04.2009, 00:00   #2
Sazary
В тени
Старожил
 
Аватар для Sazary
 
Регистрация: 19.12.2008
Сообщений: 5,788
По умолчанию

tanek
Сразу вопрос: что, если максимальных элементов несколько?
Заменить один из них, или все?

И первая замеченная ошибка:
Код:
close(fin);
close(fout);
close вместо fclose

И еще: зачем вам две матрицы?
Вполне очевидно, чтобы что-то понять, необходимо книги читать.
Не нужно плодить бессмысленных тем. Вас Поиск избавит от многих проблем.

___________________________________ ___________________________________ _______
[=Правила форума=]_____[Поиск]_____[Литература по С++]____[Литература. Паскаль]
Sazary вне форума Ответить с цитированием
Старый 24.04.2009, 00:13   #3
Sazary
В тени
Старожил
 
Аватар для Sazary
 
Регистрация: 19.12.2008
Сообщений: 5,788
По умолчанию

В общем, не важно.
Вот, исправил.
Код:
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
#define N 100;

int main ()
{
  FILE *fin,*fout;
  char input_name[100];
  int i,j;
  int string,column;
  int ** mass1;
  int min=0;
  int max=0;

  string=column=0;
  printf("введите имя файла\n");
  gets(input_name);
  fin=fopen (input_name,"rt");
  if (fin==NULL){
    printf("Файл не найден.Конец программы\n");
    scanf(input_name);
    return 0;
    }
  fscanf (fin,"%d", &string);
  fscanf (fin,"%d", &column);
  mass1 = (int **)malloc(string*sizeof(int*));

  for (i=0;i<string;i++)
    mass1[i] = (int*)malloc(column*sizeof(int));

  printf("исходная матрица\n");
  for (i=0;i<string;i++)
    for (j=0;j<column;j++)
    {
      fscanf (fin,"%d", &mass1[i][j]);
      printf ("%d%c",mass1[i][j],(j<column-1)?' ':'\n');
    }
  //-------------

 for(j=0;j<column;j++)
  {
   min=max=mass1[0][j];
   for(i=0;i<string;i++)
    {
     if(mass1[i][j]>max) max=mass1[i][j];
     if(mass1[i][j]<min) min=mass1[i][j];
    }
   for(i=0;i<string;i++)
     if(mass1[i][j]==max) mass1[i][j]=1;
     else if(mass1[i][j]==min) mass1[i][j]=-1;
  }

//-----------------

  printf("результаты программы сохранены в файле OUT.txt\n");
  printf("обработанная матрица: \n");
  fout=fopen("out.txt","wr");
  fprintf(fout,"обработанная матрица: \n");
  for (i=0;i<column;i++)
    {
     for (j=0;j<string;j++)
     {
      fprintf(fout,"%4d", mass1[i][j]);
      printf("%4d",mass1[i][j]);
     }
     fprintf(fout,"\n");
     printf("\n");
    }
  for(i = 0; i < string; i++)
    free(mass1[i]);
  free(mass1);

      fclose(fin);
      fclose(fout);
      getch();
}
Вполне очевидно, чтобы что-то понять, необходимо книги читать.
Не нужно плодить бессмысленных тем. Вас Поиск избавит от многих проблем.

___________________________________ ___________________________________ _______
[=Правила форума=]_____[Поиск]_____[Литература по С++]____[Литература. Паскаль]
Sazary вне форума Ответить с цитированием
Старый 25.04.2009, 23:24   #4
tanek
Форумчанин
 
Регистрация: 07.03.2009
Сообщений: 209
По умолчанию

скажите пожалуйста а можно ли эту программу переписать и функциями????? Я вот попробывала , но что то не получается:
Код:
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
#define N 100;



void OpenFile (FILE *fin)
{
  char input_name[100];

  printf("Введите имя файла\n");
  gets(input_name);
  fin=fopen (input_name,"rt");
  if (fin==NULL){
    printf("Файл не найден.Конец программы\n");
    scanf(input_name);
    exit(1);
   }
}

void vidileniePamiti (FILE *fin,int string,int column,int **mass1)
{
 int i;
 fscanf (fin,"%d", string);
  fscanf (fin,"%d", column);
  mass1 = (int **)malloc(string*sizeof(int*));

  for (i=0;i<string;i++)
    mass1[i] = (int*)calloc(column,sizeof(int));
}

void OutputIsxMatrix(FILE *fin,int string,int column,int**mass1)
{ int i,j;

  printf("Исходная матрица\n");
  for (i=0;i<string;i++)
    for (j=0;j<column;j++)
    {
      fscanf (fin,"%d", &mass1[i][j]);
      printf ("%d%c",mass1[i][j],(j<column-1)?' ':'\n');
    }
}

void Inizializ(int column,int string,int **mass1)
{ int i,j;
  int max,min;

 for(j=0;j<column;j++)
  {
   min=max=mass1[0][j];
   for(i=0;i<string;i++)
    {
     if(mass1[i][j]>max) max=mass1[i][j];
     if(mass1[i][j]<min) min=mass1[i][j];
    }
   for(i=0;i<string;i++)
     if(mass1[i][j]==max) mass1[i][j]=1;
     else if(mass1[i][j]==min) mass1[i][j]=-1;
  }
}





void PreobrMatrix(FILE *fout,int string, int column, int **mass1)
{ int i,j;


  printf("Преобразованная матрица сохранена в файле OUT.txt\n");
  printf("Преобразованная матрица: \n");
  fout=fopen("out.txt","wr");
  fprintf(fout,"Преобразованная матрица: \n");
  for (i=0;i<column;i++)
    {
     for (j=0;j<string;j++)
     {
      fprintf(fout,"%4d", mass1[i][j]);
      printf("%4d",mass1[i][j]);
     }
     fprintf(fout,"\n");
     printf("\n");
    }

}

void OsvobozdenitPamiti(FILE *fin,FILE *fout,int string,int**mass1)
{ int i;
 for(i = 0; i < string; i++)
    free(mass1[i]);
  free(mass1);

      close(fin);
      close(fout);
      getch();

}

void main ()
{
  FILE *fin,*fout;
  int string=0;
  int column=0;
  int ** mass1;


  OpenFile(fin);
  vidileniePamiti(&fin,string,column,&mass1);
  OutputIsxMatrix(&fin,string,column,&mass1);
  Inizializ(column,string,&mass1);
  PreobrMatrix(&fout,string,column,&mass1);
  OsvobozdenitPamiti(&fin,&fout,string,mass1);
}
посмотрите пожалуйста.....
tanek вне форума Ответить с цитированием
Старый 26.04.2009, 13:50   #5
Sazary
В тени
Старожил
 
Аватар для Sazary
 
Регистрация: 19.12.2008
Сообщений: 5,788
По умолчанию

Ну вот, исправил:
Код:
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
#define N 100;


FILE* OpenFile()
{
  FILE *fin;
  char input_name[100];
  printf("Введите имя файла\n");
  gets(input_name);
  fin=fopen (input_name,"rt");
  if (fin==NULL){
    printf("Файл не найден.Конец программы\n");
    exit(1);
   }
return fin;
}

int** vidileniePamiti (FILE *fin,int &string,int &column)
{
 int i;
 int **mass1;
 fscanf (fin,"%d", &string);
  fscanf (fin,"%d", &column);
  mass1 = (int **)malloc(string*sizeof(int*));

  for (i=0;i<string;i++)
    mass1[i] = (int*)calloc(column,sizeof(int));
 return mass1;
}

void OutputIsxMatrix(FILE *fin,int string,int column,int**mass1)
{ int i,j;

  printf("Исходная матрица\n");
  for (i=0;i<string;i++)
    for (j=0;j<column;j++)
    {
      fscanf (fin,"%d", &mass1[i][j]);
      printf ("%d%c",mass1[i][j],(j<column-1)?' ':'\n');
    }
}

void Inizializ(int column,int string,int **mass1)
{ int i,j;
  int max,min;

 for(j=0;j<column;j++)
  {
   min=max=mass1[0][j];
   for(i=0;i<string;i++)
    {
     if(mass1[i][j]>max) max=mass1[i][j];
     if(mass1[i][j]<min) min=mass1[i][j];
    }
   for(i=0;i<string;i++)
     if(mass1[i][j]==max) mass1[i][j]=1;
     else if(mass1[i][j]==min) mass1[i][j]=-1;
  }
}





FILE* PreobrMatrix(int string, int column, int **mass1)
{ int i,j;
  FILE *fout;
  printf("s,c = %d %d\n",string,column);
  printf("Преобразованная матрица сохранена в файле OUT.txt\n");
  printf("Преобразованная матрица: \n");
  fout=fopen("out.txt","wr");
  fprintf(fout,"Преобразованная матрица: \n");
  for (i=0;i<column;i++)
    {
     for (j=0;j<string;j++)
     {
      fprintf(fout,"%4d", mass1[i][j]);
      printf("%4d",mass1[i][j]);
     }
     fprintf(fout,"\n");
     printf("\n");
     fflush(fout);
    }
 return fout;
}

void OsvobozdenitPamiti(FILE *fin,FILE *fout,int string,int**mass1)
{
 int i;
 for(i = 0; i < string; i++)
    free(mass1[i]);
  free(mass1);
      fclose(fin);
      fclose(fout);
      getch();

}

int main ()
{
  FILE *fin,*fout;
  int string=0;
  int column=0;
  int ** mass1;


  fin = OpenFile();
  mass1 = vidileniePamiti(fin,string,column);
  OutputIsxMatrix(fin,string,column,mass1);

  Inizializ(column,string,mass1);
  fout = PreobrMatrix(string,column,mass1);
  OsvobozdenitPamiti(fin,fout,string,mass1);

 return 0;
}
Вполне очевидно, чтобы что-то понять, необходимо книги читать.
Не нужно плодить бессмысленных тем. Вас Поиск избавит от многих проблем.

___________________________________ ___________________________________ _______
[=Правила форума=]_____[Поиск]_____[Литература по С++]____[Литература. Паскаль]
Sazary вне форума Ответить с цитированием
Старый 27.04.2009, 20:50   #6
tanek
Форумчанин
 
Регистрация: 07.03.2009
Сообщений: 209
По умолчанию

Извините Sazary , а програма не компилится......говорит Declaration syntax errer в строке
Код:
int** vidileniePamiti (FILE *fin,int &string,int &column)
, не скажите в чем проблема?????????
tanek вне форума Ответить с цитированием
Старый 27.04.2009, 20:56   #7
Sazary
В тени
Старожил
 
Аватар для Sazary
 
Регистрация: 19.12.2008
Сообщений: 5,788
По умолчанию

Хм.. А вы уверены, что все правильно скопировали и ничего не добавили? Попробуйте, что-ли, еще раз. Сейчас без проблем скомпилил этот листинг.

Какой у вас компилятор?
Вполне очевидно, чтобы что-то понять, необходимо книги читать.
Не нужно плодить бессмысленных тем. Вас Поиск избавит от многих проблем.

___________________________________ ___________________________________ _______
[=Правила форума=]_____[Поиск]_____[Литература по С++]____[Литература. Паскаль]
Sazary вне форума Ответить с цитированием
Старый 27.04.2009, 21:17   #8
tanek
Форумчанин
 
Регистрация: 07.03.2009
Сообщений: 209
По умолчанию

Turbo C 2.0 и Visual Studio 2005
tanek вне форума Ответить с цитированием
Старый 27.04.2009, 21:19   #9
tanek
Форумчанин
 
Регистрация: 07.03.2009
Сообщений: 209
По умолчанию

Нет не компилится она .............
tanek вне форума Ответить с цитированием
Старый 27.04.2009, 21:20   #10
tanek
Форумчанин
 
Регистрация: 07.03.2009
Сообщений: 209
По умолчанию

Говорит та самая ошибка
tanek вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Обращение матрицы методом союзной матрицы dofmat Помощь студентам 6 03.10.2011 15:01
Выбор языка blackz Свободное общение 10 15.05.2010 17:07
Смена языка Simon..14 Общие вопросы C/C++ 2 31.01.2009 15:06
Загрузка языка AnGrig Общие вопросы Delphi 6 17.10.2007 09:05