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

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

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

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

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

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

Помогите. Завтра сдавать лабу, а я никак не могу доделать ее. Нада сделать чтобы процедура generate записывала свой массив в переменную mas[10][10] главной программы. Заранее благодарен.

Вот мое задание: "Решить с применением функций, в которые передаются массивы. Дана действительная квадратная матрица порядка 10. В строках с отрицательным элементом на главной диагонали найти:
а) сумму всех элементов;
б) наибольший из всех элементов."


Код:
#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; 27.04.2009 в 04:03.
Vistar вне форума Ответить с цитированием
Старый 27.04.2009, 08:08   #2
pu4koff
Старожил
 
Аватар для pu4koff
 
Регистрация: 22.05.2007
Сообщений: 9,065
По умолчанию

Вообще-то индексы в массиве начинаются с нуля, а не единицы.
Код:
int generate(int mas[10][10])
{
  srand(time(NULL));
  for (int j = 0; j < 10; j++)
   ...
}
pu4koff вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Передача массива из чисел в функцию x007 Общие вопросы C/C++ 3 21.04.2009 23:39
Передача массива строк в функцию. Crasty Общие вопросы C/C++ 2 14.04.2009 13:29
передача указателя в функцию arturka Помощь студентам 3 06.07.2008 00:25
Передача данных в функцию по указателю Игорь007 Общие вопросы C/C++ 2 23.06.2008 20:17
Передача двухмерного массива в функцию IgorKr Общие вопросы C/C++ 2 28.03.2008 01:11