четверг, 14 апреля 2016 г.

EDUPRACTICE: Треугольные числа и введение в программирование

Внимание, этот пост методически не доработан, но содержит работоспособный код и условие задачи. Осенью на "Введении в программирование" мы со студентами решали следующую задачку:
Сформировать структуру данных - массив массивов, первый массив из одного элемента, каждый следующий больше предыдущего на один элемент. При этом всего элементов в массиве N. Выглядит, если заполнен числами от 1 до N примерно так:
1
2 3
4 5 6
...
.. (N-1) N

Основная проблема, естественно, возникла с вычислением количества строк в массиве массивов. Я выбрала формулу N-го треугольного числа для оценки количества строк.
#include "iostream"
using namespace std;
// getting the number of maximum triangle number
// with value less then N
// function return 0 for N < 0
int getMaxTriangleNumber(int N) {
 if (N <= 0) return 0;
 int tNumberValue = 1;
 int tNumberCounter = 1;
 while (tNumberValue < N)
  tNumberValue = ++tNumberCounter*(tNumberCounter + 1) / 2;
 return tNumberCounter;
}
//
int** CreateJaggedArray(int n) {
 // calculate number of arrays
 int arrRowNumb = getMaxTriangleNumber(n);
 int** arr = new int*[arrRowNumb];
 int rowItemNumCounter = 0; // number items in a row
 for (int i = 0; i < arrRowNumb; i++){
  // the last not full row
  if (n < i) {
   arr[i] = new int[n];
   rowItemNumCounter = n;
  }
  // regular full row
  else
  {
   arr[i] = new int[i + 1];
   rowItemNumCounter = i + 1;
  }
  // filling the row 
  for (int j = 0; j < rowItemNumCounter; j++){
   arr[i][j] = n--;   
  }
  cout << endl;
 }
 // free memory
 //for (int i = 0; i < arrRowNumb; i++)
 // delete[] arr[i];
 //delete[]arr;
 return arr;
}
// Free memory proc
void FreeMemOfJaggedArr(int** jarr) {
 for (int** curr = 0; curr != &jarr[sizeof(jarr)]; curr++)
  delete[] curr;
 delete[]jarr;
}
// N - total number of elements in jagged array
void ShowJaggedArray(int** arr) {
 
}
int main() {
 cout << "Enter number of items: ";
 int n;
 cin >> n;
 if (n <= 0)
  cout << "Can't create an array";
 else
  ShowJaggedArray(n);
 system("pause");
 return 0;
}

Комментариев нет:

Отправить комментарий