Форум программистов, компьютерный форум CyberForum.ru

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

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

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

22.11.2011, 17:19. Просмотров 450. Ответов 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...
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
22.11.2011, 17:19     Расписать задачу
Посмотрите здесь:

C++ Расписать построчно код
C++ расписать каждую строчку что она значит и посмотрите правилоно ли написана программа..
Задача перебрать игру змейка и расписать комментариями до запятой C++
Как расписать этот пример в dev-C++? C++
Операторы, как расписать? C++
C++ нужно описать программу. т.е. каждую команду и каждую группу нужно расписать. подсобите пожалуйста
C++ Запрограммировать класс матрица, и расписать методы работы с ним
как расписать C++
C++ Расписать по функциям
Расписать действия программы C++
C++ Расписать процедуру высчитывания ближайшего числа к случайному
Подробно расписать что происходит в данном фрагменте кода C++

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Ответ Создать тему
Опции темы

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