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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 07.05.2009, 00:34   #1
Vistar
учащийся
Форумчанин
 
Аватар для Vistar
 
Регистрация: 26.04.2009
Сообщений: 144
Восклицание Передача параметров в функцию через ссылку

Мне нужно сделать чтобы сгенерированый массив в функции generate был доступен в функции main и чтобы в функцию параметры передавались через ссылки.

Код:
#include <iostream.h>
#include <conio.h>
#include <stdlib.h>
#include <fstream.h>
#include <stdio.h>
#include <string.h>

int generate(void); // функция генерирования елементов матрицы с помощью rand
void print(void); // печать матрицы на экран
void print_to_file(int mas[10][10]); // печать матрицы в файл
int enter(void); // ввод елементов матрицы с клавиатуры
int from_file(); // считывание елементов матрицы с файла
void sum_of_all(int mas[10][10]); // находит сумму всех елементов тех строк, в которых елемент стоящий на главной диагонали меньше 0
void large_num(int mas[10][10]); // находит найбольший елемент из всех елементов тех строк, в которых елемент стоящий на главной диагонали меньше 0

void main()
{
   int mas[10][10];
   int ch;
   clrscr();

   do
   {
      cout << "Ввести с помощью клавиатуры: (1)\n";
      cout << "Сгенерировать число с помощью процедуры random (2)\n";
      cout << "Записать в файл сгенерированую матрицу (3)\n";
      cout << "Взять матрицу с файла (4)\n";
      cout << "Выход (0)\n";
      cout << "\nEnter you choise: ";
      cin >> ch;
      if (ch > 4)
      {
	 cout << "Error! You enter wrong key. Please, retry.\n\n";
         continue;
      }

      switch(ch)
      {
	 case 1: {enter(); break;}
	 case 2: {generate(); break;}
	 case 3: {print_to_file(mas); break;}
	 case 4: {from_file(); break;}
      }
      large_num(mas);
      sum_of_all(mas);
   }
   while (ch != 0);
}


int generate(void)
{
   int mas[10][10];
   srand(time(NULL));
   for (int j = 1; j <= 10; j++)
      {
      for (int i = 1; i <= 10; i++)
	 {
	 mas[j][i] = 20 - rand() % 25;
	 }
      }
return (mas[10][10]);
}


int enter(void)
{
   int mas[10][10];
   for (int j = 1; j <= 10; j++)
   {
      for (int i = 1; i <= 10; i++)
	 {
	 cout << "Enter " << j << " " << i << " element: ";
	 cin >> mas[j][i];
	 }
      cout << endl << endl;
   }
   return mas[10][10];
}


int from_file()
{
   int mas[10][10];
   int k;
   FILE *L = fopen("D:\\lab5.dat", "rb");

   for (int j = 1; j <= 10; j++)
   {
      for (int i = 1; i <= 10; i++)
	 {
	 fread(&k, sizeof(k), 1, L);
	 mas[j][i] = k;
	 }
      cout << endl << endl;
   }
   return mas[10][10];
}


void print(int mas[10][10])
{
   for (int j = 1; j <= 10; j++)
      {
      for (int i = 1; i <= 10; i++)
	 {
	 cout << "  " << mas[j][i];
	 }
      cout << endl << endl;
      }
   getch();
}


void print_to_file(int mas[10][10])
{
   FILE *h = fopen("D:\\Lab5.dat", "wb");
   char* txt = "\n\n";

   for (int j = 1; j <= 10; j++)
      {
      for (int i = 1; i <= 10; i++)
	 {
	 fwrite(&mas[j][i], sizeof(mas), 1, h);
	 }
      fwrite(&txt, strlen(txt), 1, h);
      }
}


void sum_of_all(int mas[10][10])
{
   int sum = 0;

   for (int j = 1; j <= 10; j++)
      {
      for (int i = 1; i <= 10; i++)
	 {
	 if ((j == i) && (mas[j][i] < 0))
	    {
	    for (int b =1; b <= 10; b++)
	       {
	       sum += mas[j][b];
	       }
	    }
	 }
      }
   cout << "Summ is: " << sum << endl;
}


void large_num(int mas[10][10])
{
   int mas_new[10][10];
   for (int j = 1; j <= 10; j++)
      {
      for (int i = 1; i <= 10; i++)
	 {
	 if ((j == i) && (mas[j][i] < 0))
	    {
	    for (int b = 1; b <= 10; b++)
	       {
	       mas_new[j][i] = mas[j][b];
	       }
	    }
	  }
      }


   int max = 0;
   for (int m = 1; m <= 10; m++)
      {
      for (int n = 1; n <= 10; n++)
	 {
	 if (mas_new[m][n] > max)
	    {
	    max = mas_new[m][n];
	    }
	 }
      }
   cout << "max: " << max;
}
Vistar вне форума Ответить с цитированием
Старый 07.05.2009, 02:27   #2
Sazary
В тени
Старожил
 
Аватар для Sazary
 
Регистрация: 19.12.2008
Сообщений: 5,788
По умолчанию

Особо не разбирался. Но, вроде, все работает:
Код:
#include <iostream.h>
#include <conio.h>
#include <stdlib.h>
#include <fstream.h>
#include <stdio.h>
#include <string.h>

#define NMAX 10

int** generate(int& n); // функция генерирования елементов матрицы с помощью rand
void print(int **mas, int n); // печать матрицы на экран
void print_to_file(int **mas,int n); // печать матрицы в файл
int** enter(int &n); // ввод елементов матрицы с клавиатуры
int** from_file(int &n); // считывание елементов матрицы с файла
void sum_of_all(int **mas,int n); // находит сумму всех елементов тех строк, в которых елемент стоящий на главной диагонали меньше 0
void large_num(int **mas,int n); // находит найбольший елемент из всех елементов тех строк, в которых елемент стоящий на главной диагонали меньше 0

int main()
{
   int **mas,n=NMAX;
   int ch;
  // clrscr();

   do
   {
      cout << "Ввести с помощью клавиатуры: (1)\n";
      cout << "Сгенерировать число с помощью процедуры random (2)\n";
      cout << "Записать в файл сгенерированую матрицу (3)\n";
      cout << "Взять матрицу с файла (4)\n";
      cout << "Вывести матрицу на экран (5)\n";
      cout << "Выход (0)\n";
      cout << "\nEnter you choise: ";
      cin >> ch;
      if (ch > 5)
      {
	 cout << "Error! You enter wrong key. Please, retry.\n\n";
         continue;
      }

      switch(ch)
      {
	 case 1: {mas = enter(n); break;}
	 case 2: {mas = generate(n); break;}
	 case 3: {print_to_file(mas,n); break;}
	 case 4: {mas = from_file(n); break;}
	 case 5: {print(mas,n); break;}
      }
      large_num(mas,n);
      sum_of_all(mas,n);
   }
   while (ch != 0);

for(int i=0; i<n; i++)
 delete[] mas[i];
delete[] mas;
return 0;
}


int** generate(int &n)
{
   int **mas = new int*[NMAX];
   for(int i=0; i<NMAX; i++)
    mas[i] = new int[NMAX];
   n = NMAX;
   srand(time(NULL));
   for (int i = 0; i < n; i++)
     {
      for (int j = 0; j < n; j++)
	     {
	      mas[i][j] = 20 - rand() % 25;
	     }
     }
return mas;
}


int** enter(int &n)
{
   int **mas;
   n = NMAX;
   for (int i = 0; i < n; i++)
   {
      for (int j = 0; j < n; j++)
	 {
	 cout << "Enter " << i << " " << j << " element: ";
	 cin >> mas[i][j];
	 }
      cout << endl << endl;
   }
   return mas;
}


int** from_file(int &n)
{
   int **mas = new int*[n];
   for(int i=0; i<n; i++)
    mas[i] = new int[n];
   int k;
   FILE *L = fopen("D:\\lab5.dat", "rb");
   n = NMAX;
   for (int i = 0; i < n; i++)
   {
      for (int j = 0; j < n; j++)
	 {
	 fread(&k, sizeof(k), 1, L);
	 mas[i][j] = k;
	 }
      cout << endl << endl;
   }
   return mas;
}


void print(int **mas, int n)
{
   for (int i = 0; i < n; i++)
      {
      for (int j = 0; j < n; j++)
	 {
	 cout << "  " << mas[i][j];
	 }
      cout << endl << endl;
      }
   getch();
}


void print_to_file(int **mas, int n)
{
   FILE *h = fopen("D:\\Lab5.dat", "wb");
   char* txt = "\n\n";

   for (int i = 0; i < n; i++)
      {
      for (int j = 0; j < n; j++)
	 {
	 fwrite(&mas[i][j], sizeof(mas), 1, h);
	 }
 fwrite(txt, strlen(txt), 1, h);
      }
}


void sum_of_all(int **mas,int n)
{
   int sum = 0;

   for (int i = 0; i < n; i++)
      {
      for (int j = 1; j < n; j++)
	 {
	 if ((i == j) && (mas[i][j] < 0))
	    {
	    for (int b =0; b < 10; b++)
	       {
	       sum += mas[i][b];
	       }
	    }
	 }
      }
   cout << "Summ is: " << sum << endl;
}


void large_num(int **mas, int n)
{
   int **mas_new = new int*[n];
   for(int i=0; i<n; i++)
    mas_new[i] = new int[n];
   for (int i = 0; i < n; i++)
      {
      for (int j = 0; j < n; j++)
	 {
	 if ((i == j) && (mas[i][j] < 0))
	    {
	    for (int b = 0; b < n; b++)
	       {
	       mas_new[i][j] = mas[i][b];
	       }
	    }
	  }
      }


   int max = 0;
   for (int m = 0; m < n; m++)
      {
      for (int k = 0; k < n; k++)
	 {
	 if (mas_new[m][k] > max)
	    {
	    max = mas_new[m][k];
	    }
	 }
      }
   cout << "max: " << max;

for(int i=0; i<n; i++)
 delete[] mas_new[i];
delete[] mas_new;
}
Вполне очевидно, чтобы что-то понять, необходимо книги читать.
Не нужно плодить бессмысленных тем. Вас Поиск избавит от многих проблем.

___________________________________ ___________________________________ _______
[=Правила форума=]_____[Поиск]_____[Литература по С++]____[Литература. Паскаль]
Sazary вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Передача параметров через ссылку xxxsas PHP 6 10.08.2009 21:09
Передача и параметров между страницами Killer_djon JavaScript, Ajax 3 04.02.2009 04:07
Передача параметров aesoem Общие вопросы Delphi 8 15.07.2008 21:51
CDialog передача параметров! mahsus Общие вопросы .NET 4 09.03.2008 17:40
Передача параметров Gudzon Общие вопросы Delphi 12 08.02.2007 08:19