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

Двумерный массив. Программу написать используя указатели и строковые функции. - C++

Восстановить пароль Регистрация
 
Dispa
1 / 1 / 0
Регистрация: 13.06.2011
Сообщений: 16
15.11.2011, 21:35     Двумерный массив. Программу написать используя указатели и строковые функции. #1
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
#include <iostream.h>
int num (int **a, const int n, const int m);
void sum (int **b, const int k, const int r);
int main () {
int i, j, str, stb;
cout<<"Vvedite chislo strok i stolbzov matrizi\n";
cin>>str>>stb;
int **mas=new int*[str];
for (i=0; i<str; i++)
for (j=0; j<stb; j++)
cin>>*(*(mas+i)+j);
cout<< "Nomer stolbza" << num (mas, str, stb);
//sum (**b, k, r);
//cout<<"Preobraz massiv: \n"<<endl;
//for(i=0; i<str; i++) {
//for (j=0; j<stb; j++) {
// cout << endl (Эта запись нужна,чтоб вывести в виде таблицы, красиво массив, куда ее поставить,я не знаю()
//cout<< *(*(mas+i)+j) << " ";
//}}
return 0;
}
int num (int **a, const int n, const int m) {
int ii, jj, q=0;
for (ii=0; ii<n; ii++)
for (jj=0; jj<m; jj++)
if (a[ii][q=jj]==0)
return (q+1);
}
//void sum (int **b, const int k, const int r) {
//   int pp, ff, e, sum=0, temp;
//   int aa[pp]={0};
//   for (pp=0; pp<k; pp++) {
//
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
15.11.2011, 21:35     Двумерный массив. Программу написать используя указатели и строковые функции.
Посмотрите здесь:

C++ построить двумерный массив вещественных чисел. (Нужно написать программу!)
Составить программу обработки двухмерного массива используя указатели и функции... C++
C++ Написать программу, которая вводит двумерный массив с клавиатуры...
Нужно написать программу(Двумерный массив) в Visual Studio 2008 C++
Написать программу копирования строки T в строку S, используя указатели. C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Svinina
 Аватар для Svinina
5 / 5 / 0
Регистрация: 28.11.2010
Сообщений: 81
15.11.2011, 21:44     Двумерный массив. Программу написать используя указатели и строковые функции. #2
А что требуется от нас то?=)
Dispa
1 / 1 / 0
Регистрация: 13.06.2011
Сообщений: 16
15.11.2011, 22:58  [ТС]     Двумерный массив. Программу написать используя указатели и строковые функции. #3
Цитата Сообщение от Svinina Посмотреть сообщение
А что требуется от нас то?=)
Я случайно сохранила сообщение не полностью, сейчас полностью напишу)

Дана целочисленная прямоугольная матрица. Определить номер первого из столбцов, содерж. хотя бы один нулевой элемент.
Характеристикой строки целочисленной матрицы назовем сумму ее отрицательных четных элементов. Переставляя строки заданной матрицы, раложить их в соотвествии с убыванием характеристик. Нужно все сделать с помощью указателей и строковых функций.

Первую часть программы я вроде худо ли бедно сделала. Во второй части вобще провал Как выводить двумерный массив с помощью функций, как сортировать строки, вобще верно ли алгоритм нахождения характеристик написала, их еще и вывести желательно в одномерном массиве. Свои потуги закомментила. Помогите, пожалуйста.
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
#include <iostream.h>
int num (int **a, const int n, const int m);
void sum (int **b, const int k, const int r);
int main () {
int i, j, str, stb;
cout<<"Vvedite chislo strok i stolbzov matrizi\n";
cin>>str>>stb;
int **mas=new int*[str];
for (i=0; i<str; i++)
for (j=0; j<stb; j++)
cin>>*(*(mas+i)+j);
cout<< "Nomer stolbza" << num (mas, str, stb);
//sum (**b, k, r);
//cout<<"Preobraz massiv: \n"<<endl;
//for(i=0; i<str; i++) {
//for (j=0; j<stb; j++) {
// cout << endl (Эта запись нужна,чтоб вывести в виде таблицы, красиво массив, куда ее поставить,я не знаю()
//cout<< *(*(mas+i)+j) << " ";
//}}
return 0;
}
int num (int **a, const int n, const int m) {
int ii, jj, q=0;
for (ii=0; ii<n; ii++)
for (jj=0; jj<m; jj++)
if (a[ii][q=jj]==0)
return (q+1);
}
//void sum (int **b, const int k, const int r) {
//   int pp, ff, e, sum=0, temp;
//   int aa[pp]={0};
//   for (pp=0; pp<k; pp++) {
//       for (ff=0; ff<r; ff++) {
//             if (e<0 && e%2==0)
//                sum+=e; }
// нужно как то вывести тут одномерный массив
// }
//int max=aa[0];
//for (pp=1;pp<n;pp++)
//if (aa[ff])<aa[ff+1])
//  for (pp=0; pp<n; pp++) {
//      for (ff=0; ff<m; ff++)
//           int temp=b[pp][ff+1];
//            b[pp][ff+1]=b[pp][ff];
//            b[pp][ff]=temp;
// }
// }
lemegeton
 Аватар для lemegeton
2910 / 1339 / 133
Регистрация: 29.11.2010
Сообщений: 2,720
17.11.2011, 07:01     Двумерный массив. Программу написать используя указатели и строковые функции. #4
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
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
 
typedef int Value;
typedef Value *Row;
typedef Row *Matrix;
 
 
int firstColumnWithZero(Matrix matrix, size_t height, size_t width) {
  int i, j;
  for (i = 0; i < height; ++i)
    for (j = 0; j < width; ++j)
      if (matrix[i][j] == 0)
        return j;
  return -1;
}
 
Value sumEvenNegatives(Row row, size_t width) {
  Value result = 0;
  int i;
  for (i = 0; i < width; ++i)
    if ((row[i] < 0) && (row[i] % 2 == 0))
      result += row[i];
  return result;
}
 
void quickSort(Matrix matrix, size_t height, size_t width,
  Value (*predicate)(Row, size_t)) {
  int i = 0, j = height;
  Row temp;
  Value pivot;
 
  pivot = predicate(matrix[height >> 1], width);
  do {
    while (predicate(matrix[i], width) > pivot) i++;
    while (pivot > predicate(matrix[j], width)) j--;
 
    if (i <= j) {
      temp = matrix[i];
      matrix[i] = matrix[j];
      matrix[j] = temp;
      i++; j--;
    }
  } while ( i<=j );
 
  if (j > 0) quickSort(matrix, j, width, predicate);
  if (height > i) quickSort(matrix + i, height - i, width, predicate);
}
 
void printMatrix(Matrix matrix, size_t height, size_t width,
  Value (*predicate)(Row, size_t)) {
  int i, j;
  for (i = 0; i < height; ++i) {
    printf("Row %3d | ", i);
    for (j = 0; j < width; ++j)
      printf("%4d", matrix[i][j]);
    printf(" | %5d\n", predicate(matrix[i], width));
  }
}
 
int main(int argc, char *argv[]) {
  srand(time(0));
  size_t width = 10;
  size_t height = 15;
  int i, j;
  Matrix matrix = (Matrix)malloc(sizeof(Row) * height);
  for (i = 0; i < height; ++i) {
    matrix[i] = (Row)malloc(sizeof(Value) * width);
    for(j = 0; j < width; ++j)
      matrix[i][j] = rand() % 101 - 50;
  }
  
  printMatrix(matrix, height, width, sumEvenNegatives);
  
  int columnWithZero = firstColumnWithZero(matrix, height, width);
  if (columnWithZero >= 0)
    printf("Number of first column with zero is %d.\n", columnWithZero);
  else
    printf("No zeroes in any column.\n");
 
  quickSort(matrix, height - 1, width, sumEvenNegatives);
 
  printf("\nSorted:\n");
  printMatrix(matrix, height, width, sumEvenNegatives);
  
  for (i = 0; i < height; ++i)
    free(matrix[i]);
  free(matrix);
  return 0;
}
Yandex
Объявления
17.11.2011, 07:01     Двумерный массив. Программу написать используя указатели и строковые функции.
Ответ Создать тему
Опции темы

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