Форум программистов, компьютерный форум, киберфорум
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Lifehouse
0 / 0 / 0
Регистрация: 12.11.2011
Сообщений: 58
#1

Расписать задачу - C++

22.11.2011, 17:19. Просмотров 496. Ответов 0
Метки нет (Все метки)

Дана целочисленная матрица размера M × N. Найти номер последней из ее строк, содержащих максимальное количество одинаковых элементов.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
 
int countSames(int *array, int width) {
  int i;
  int *counters = (int*)malloc(width * sizeof(int));
  // можно функцией memset
  for (i = 0; i < width; ++i) counters[i] = 0;
  for (i = 0; i < width; ++i) ++counters[array[i]];
 
  int result = 0;
  for (i = 0; i < width; ++i)
    if (counters[i] > 1)
      result += counters[i];
 
  free(counters);
  return result;
}
 
int main(int argc, char *argv[]) {
  srand(time(0));
  int height = 7 + rand() % 5;
  int width = 7 + rand() % 5;
  
  int i, j;
  int **matrix = (int **)malloc(height * sizeof(int*));
  
  for (i = 0; i < height; ++i) {
    matrix[i] = (int *)malloc(width *sizeof(int));
    printf("Row %3d:", i + 1);
    for (j = 0; j < width; ++j)
      printf("%3d", matrix[i][j] = rand() % width);
    int same = countSames(matrix[i], width);
    printf(" | %3d same", same);
    printf("\n");
  }
 
  int maxSameRowId = 0;
  int maxSameRowValue = countSames(matrix[maxSameRowId], width);
  for (i = 1; i < height; ++i) {
    int same = countSames(matrix[i], width);
    if (same >= maxSameRowValue) {
      maxSameRowId = i;
      maxSameRowValue = same;
    }
  }
 
  printf("\nMaximum same numbers %d are in row number %d\n",
    maxSameRowValue, maxSameRowId + 1);
 
  for (i = 0; i < height; ++i)
    free(matrix[i]);
  free(matrix);
 
  return 0;
}
Нужно описать задачу, как и что делает определенная команда...
На примере как здесь
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
#include<stdio.h> /*Модуль функций стандартного ввода-вывода*/
#include<process.h>
#include<bios.h>
#include<alloc.h>/*Модуль функций работы с динамической памятью*/
#include<conio.h> /*Модуль функций расширения ввода-вывода(в Паскале
                    аналогичный модуль CRT)*/
/*Предварительное описание используемых в программе функций*/
 void inputmatr(float x[][20],int *m,int *n,char c);
 void outputmatr(float x[][20],int m,int n);
 int num_neg(float x[][20],int m,int n);
/*************************************************************************/
/*Главная программа(функция) включает вызовы функций ввода, вывода и
  обработки матрицы*/
 
 void main()
  {
   float x[20][20];
   int  mx, my;
   /*Матрица Х располагается в стеке, для матрицы А место выделяется
     в куче. Обработка матриц выполняется общими процедурами*/
   clrscr();
   remove("rez.dat");/*удаление файла результатов, если он имеется в текущем
   директории*/
   inputmatr(x,&mx,&my,'x');
   clrscr();
   printf("Вывод результатов обработки матрицы х\n");
   outputmatr(x,mx,my);
   printf("Количество столбцов с отрицательными элементами %i\n", num_neg(x,mx,my));
   printf("\n\n         Для выхода нажмите любую клавишу ");
   getch();/*Ввод символа с клавиатуры без эха на экране. */
  }
 
 
/***************************************************************/
/*Функция возврвщает количество столбцов матрицы,
               содержащие отрицательные элементы.*/
/*В функцию передается матрица как двумерный массив. Элементы матрицы
  обрабатываются с использованием индексных выражений*/
 int num_neg(float x[][20],int m,int n)
  {
   int count = 0;
   int i,j;
 
   for ( j = 0; j < n; i++)
   {
      for (i = 0; i < m; i++)
      {
         if (mas[i][j] < 0)
         {
            count++;
            break;
         }
      }
   }
   return count;
  }
/***************************************************************************/
/*Функция обеспечивает вывод результатов программы на экран или в файл*/
/*В функцию передается матрица как двумерный массив. Элементы матрицы
  обрабатываются с использованием индексных выражений*/
 void outputmatr(float x[][20],int m,int n)
  {int i,p,j,imax,jmax,*kol_min;
   FILE *f;
   printf("\n Вывод матрицы на экран<s> или в файл<f>?\n\n");
   if(((p=getch())=='f')||(p=='F')||(p=='а')||(p=='А'))
    {
     p='f';/*Переменная запоминает направление вывода*/
     if((f=fopen("rez.dat","at"))==NULL)/*Открытие файла в текстовом режиме
       для записи в конец файла*/
      {
       printf("Невозможно открыть файл для результатов\n"
           " Для выхода в DOS нажмите любую клавишу\n");
       getch();
       exit(0);
      }
    }
     else f=stdout;
   fprintf(f,"\tИсходная матрица x\n");
   for(i=0;i<m;i++)
    {
     for(j=0;j<n;j++)
      fprintf(f,"%8.2f",x[i][j]);
     fprintf(f,"\n");
    }
   kol_min=num_neg(x,m,n);
   fprintf(f,"количество отрицательных элементов в столбцах матрицы\n");
   for(j=0;j<n;j++)
      fprintf(f,"%8d",kol_min[j]);
   fprintf(f,"\n");
   max_el((float *)x,m,n,kol_min);
   fprintf(f,"\tПреобразованная матрица x\n");
   for(i=0;i<m;i++)
    {
     for(j=0;j<n;j++)
      fprintf(f,"%8.2f",x[i][j]);
     fprintf(f,"\n");
    }
   if(p=='f')fclose(f);
  }
/***********************************************************************/
/*Функция вводит исходные данные с клавиатуры или из файла*/
/*В функцию передается матрица как двумерный массив. Элементы матрицы
  обрабатываются с использованием индексных выражений*/
 void inputmatr(float x[][20],int *m,int *n,char c)
  {
   float xr;
   int  i,j,pr,ch;
   FILE *f; char p;
   clrscr();
   printf("Ввод размеров и элементов матрицы %c\n",c);
   printf("\n\n      Введите размеры матрицы m,n<=20\n ");
   /*Перед вводом с клавиатуры целесообразно очистить системный
     буфер клавиатуры*/
   /*while ((ch=scanf("%c",ch))!=0);getch()
     {ch=bioskey(0);
      putch(ch);
     }*/
   scanf("%d%d",m,n);
   printf(" Ввод матрицы с клавиатуры<k> или из файла<f>?\n");
   if(((p=getch())=='f')||(p=='F')||(p=='а')||(p=='А'))
    {
     p='f';
     if((f=fopen("matr.dat","rt"))==NULL)
      {
       printf("Исходный файл не найден\n Для выхода в DOS нажмите "
               "любую клавишу");
       getch();
       exit(0);
      }
    }
     else f=stdin;
   if(p!='f')printf("Введите элементы матрицы\n");
   for(i=0;i<*m;i++)
    for(j=0;j<*n;j++)
     {
      pr=fscanf(f,"%f",&xr);
      if(pr<=0)
       {
        if(pr==EOF)
         printf("Обнаружен конец файла\n");
        else
         printf("Ошибка чтения %s \n",(p=='f')?"из файла":"с клавиатуры");
        printf("Для выхода в DOS нажмите любую клавишу");
        getch();
        exit(0);
       }
      else x[i][j]=xr;
     }
   if(p=='f')fclose(f);
  }
Заранее большое спасибо

Добавлено через 52 минуты
Mne prosto etu zadachu sdelali , ya hotel poprosit' etu zadachu esli mozhno polegche sdelat' , a to prepodovatel' shknit na schet malloc , ** , mi ewe ih ne prohodili...
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
22.11.2011, 17:19
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Расписать задачу (C++):

как расписать - C++
{log}_{u}2x-{u}^{3}

Расписать по функциям - C++
Я совершенный новичок. Начали проходить функции, решил задачу, осталось выписать ее по функциям. Подсобите кто опытный, что бы я в...

Расписать построчно код - C++
Помогите, мне нужно написать что описывает это программа, и все Void sort (int in, int out, int n) { Int I, j, cnt; For (i=0; i&lt;n;...

Операторы, как расписать? - C++
как расписать? x+=y

Расписать действия программы - C++
ПОмогите пожалуйста подписать строчки, как происходит выполнеие программы, через что проходит. #include&lt;iostream&gt; #include &lt;locale.h&gt; ...

Как правильно расписать ряд Тейлора? - C++
X-2^2*X^2/5+2^3*X^3/10-2^4*X^4/17+2^5*x^5/26

0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
22.11.2011, 17:19
Привет! Вот еще темы с ответами:

Как правильно расписать ряд Тейлора? - C++
x-x^2/2^2+x^3/3^2-x^4/4^2+x^5/5^2-x^6/6^2

Как правильно расписать рекурсивную функцию? - C++
Мне надо написать блок схему для рекурсивной функции : могу приложить все значения в отладчике например входные данные n-7 k-3 в конце...

Как расписать этот пример в dev-C++? - C++
Как расписать этот пример в dev-C++?

Расписать процедуру высчитывания ближайшего числа к случайному - C++
Ребята, пишу свою мини-игру. И возникла загвоздка. Суть игры: чье число окажется ближе к случайно выпавшему числу, тот победил. Диапазон...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
1
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru