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

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

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 23, средняя оценка - 4.78
uto
6 / 6 / 0
Регистрация: 07.05.2009
Сообщений: 94
#1

Одномерные массив (Шаблоны функций) - C++

24.05.2009, 20:34. Просмотров 3408. Ответов 11
Метки нет (Все метки)

Задание.
Шаблоны функций
Выполнить упражнения из раздела «Одномерные массивы», оформив каждый пункт задания в виде шаблона функции. Все необходимые данные для функций должны передаваться им в качестве параметров. Использование глобальных переменных в функциях не допускается. Привести примеры программ, использующих эти шаблоны для типов int, float и double.
Вот задание из одномерных массивов
В одномерном массиве, состоящем из n вещественных элементов, вычислить:
1) количество элементов массива, меньших С;
2) сумму целых частей элементов массива, расположенных после последнего отрицательного элемента.
Преобразовать массив таким обрахом, чтобы сначала располагались все элементы, отличающиеся от максимального не более чем на 20%, а потом - все остальные.
Вот решенное задание из одномерных массивов
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
#include <vcl.h>
#pragma hdrstop
#include <conio.h>
#include <iostream.h>
 
//---------------------------------------------------------------------------
 
#pragma argsused
int main(int argc, char* argv[])
{
 const int n=10;
 float a[n], c;
 int kol;
 cout << "Enter C: ";
 cin >> c;
 kol=0;
 cout << "Enter " << n << " numbers:" << endl;
 for (int i=1; i<=n; i++) cin >> a[i];
 for (int i=1; i<=n; i++) cout << a[i] << " ";
 for (int i=1; i<=n; i++) {
 if (a[i]<c)
 kol++;
 }
 cout << "\n" << kol << " numbers less C.";
 getch ();
        return 0;
}
Очень прошу помочь с шаблонами функций, время поджимает

Добавлено через 5 часов 15 минут 11 секунд
Ребята, я показал вам готовый код предыдущей лабы. Надо просто ее преобразовать, ну помогите хоть кто-нибудь :'(
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
24.05.2009, 20:34
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Одномерные массив (Шаблоны функций) (C++):

Шаблоны функций и массив указателей - C++
Задание! Создайте шаблонную функцию maxn(), которая принимает в качестве аргумента массив элементов типа Т и целое число, представляющее...

Шаблоны функций и двумерный массив - C++
Задание следующее: программа работает с двумерным массивом, получает размерность и элементы, выводит матрицу на экран. Далее подсчитывает...

Возожно ли создать массив указателей на шаблоны функций? - C++
Можно ли создать массив указателей на шаблоны функций, если да, то как? Пробовал вот так template &lt;class my_type&gt; void my_func( my_type*...

Шаблоны функций - C++
Всех приветствую! народ помогите задали лабораторку, а в с++ я только новичок подскажите как сделать следующее:

Шаблоны функций в с++ - C++
Подскажите, почему появляется сообщение об ошибке? как исправить? #include &quot;stdafx.h&quot; #include &lt;conio.h&gt; //#include &lt;ctime&gt; ...

шаблоны функций на С++ - C++
помогите с задачей условие таково. Дан одна мерный массив состоящий из целых чисел нужно найти произвидение всех отрицательных элементов и...

11
DEM90
17 / 17 / 1
Регистрация: 06.05.2009
Сообщений: 115
24.05.2009, 21:02 #2
uto, в чём имено у вас проблема? Первое задание у вас правильно назодится, а последнее отрицательное значение находится так:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
int posl_otr; //нидекс в массиве последнего отрицательного массива
for(int i-0;i<n;i++)
{
  if(a[i]<0)
    posl_otr = i;
}
 
//а потом
int new_arr[n];
for(int i=posl_otr ;i<n;i++)
{
  new_arr[q] = a[i];
}
А потом сортируете его как вам надо
0
uto
6 / 6 / 0
Регистрация: 07.05.2009
Сообщений: 94
24.05.2009, 21:07  [ТС] #3
Забыл выложить, я отрицательные считал иначе, у меня даже короче))))

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
{
int n;
cout << "Enter numbers elements "; cin >> n;
int i, ineg;
float sum, *a=new float [n];
cout << "Enter elements of array ";
for (i=0; i<n; i++) cin >> a[i];
for (i=0; i<n; i++) cout << a[i] << ' ';
for (i=0; i<n; i++) if (a[i]<0) ineg=i;
for (sum=0, i=ineg+1; i<n; i++) sum += int(a[i]);
cout << "The sum " << sum;
        getch ();
        return 0;
}
Но суть не в этом, а вот в чем
Цитата Сообщение от uto Посмотреть сообщение
Выполнить упражнения из раздела «Одномерные массивы», оформив каждый пункт задания в виде шаблона функции. Все необходимые данные для функций должны передаваться им в качестве параметров. Использование глобальных переменных в функциях не допускается. Привести примеры программ, использующих эти шаблоны для типов int, float и double.
0
Monte-Cristo
2790 / 1376 / 30
Регистрация: 07.03.2009
Сообщений: 4,446
24.05.2009, 21:12 #4
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
template<typename Type>
int counter(Type *A, int n, Type C)
{
   int kol=0;
   for (int i=0; i<n; i++)
      if (A[i] < C) kol++;
   return kol;
}
 
template<typename Type>
int summa(Type *A, int n)
{
   int res=0;
   int neg=0;
   for (int i=0; i<n; i++)
      if (A[i] < 0) neg = i;
   for (int i=neg+1; i<n; i++)
      res += (int)A[i];
   return res;
}
1
uto
6 / 6 / 0
Регистрация: 07.05.2009
Сообщений: 94
24.05.2009, 21:14  [ТС] #5
И это всё? Лаба готова? оО
0
Monte-Cristo
2790 / 1376 / 30
Регистрация: 07.03.2009
Сообщений: 4,446
24.05.2009, 21:15 #6
ну это код шаблонов функций... в main() вызвать ты их сможешь, я недеюсь?
0
uto
6 / 6 / 0
Регистрация: 07.05.2009
Сообщений: 94
24.05.2009, 21:21  [ТС] #7
Неа, никогда не делал
Может покажешь как это делается?
----------------------------------------

Сегодня помогаете мне, завтра начну помогать вам и другим, а если помог, скажи спасибо
0
Monte-Cristo
2790 / 1376 / 30
Регистрация: 07.03.2009
Сообщений: 4,446
24.05.2009, 21:41 #8
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
#include <iostream>
using namespace std;
 
   /*
   В одномерном массиве, состоящем из n вещественных элементов, вычислить:
   1) количество элементов массива, меньших С;
   2) сумму целых частей элементов массива, расположенных после последнего отрицательного элемента.
   Преобразовать массив таким обрахом, чтобы сначала располагались все элементы, отличающиеся от 
   максимального не более чем на 20%, а потом - все остальные.
   */
 
template<typename Type>
int counter(Type *A, int n, Type C)
{
   int kol=0;
   for (int i=0; i<n; i++)
      if (A[i] < C) kol++;
   return kol;
}
 
template<typename Type>
int summa(Type *A, int n)
{
   int res=0;
   int neg=0;
   for (int i=0; i<n; i++)
      if (A[i] < 0) neg = i;
   for (int i=neg+1; i<n; i++)
      res += (int)A[i];
   return res;
}
 
template<typename Type>
void modify(Type *A, int n)
{
   int max=0;
   for (int i=0; i<n; i++)
      if (A[i] > A[max]) max = i;
 
   Type x = (A[max]/100 * 20);
 
   int l=0;
   for (int i=0; i<n; i++)
   {
      if (A[i]>(A[max]-x))
      {
         Type tmp = A[l];
         A[l++] = A[i];
         A[i] = tmp;
      }
   }
}
 
template<typename Type>
void print(Type *A, int n)
{
   for (int i=0; i<n; i++)
      cout << A[i] << " ";
   cout << endl;
}
 
int main()
{
   const int n = 10;
   float A[n] = {-1.1, -2.2, -3.3, 4.4, 5.5, 6.6, 7.7, 8.8, 9.9, 10.10};
   float C;
 
   cin >> C;
   cout << "KOl-vo: " << counter(A, n, C) << endl;
   cout << "Suuma: " << summa(A,n) << endl;
   modify(A, n);
   print(A, n);
 
   system("pause");
   return 0;
}
1
CyBOSSeR
Эксперт С++
2304 / 1674 / 86
Регистрация: 06.03.2009
Сообщений: 3,675
24.05.2009, 21:44 #9
Цитата Сообщение от uto Посмотреть сообщение
Неа, никогда не делал
Может покажешь как это делается?
Ну коль не шутишь, то:
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
#include <iostream>
 
using std::cout;
using std::cin;
using std::endl;
 
template<typename Type>
int counter(Type *A, int n, Type C)
{
  int kol=0;
  for (int i=0; i<n; i++)
    if (A[i] < C) kol++;
  return kol;
}
 
template<typename Type>
int summa(Type *A, int n)
{
  int res=0;
  int neg=0;
  for (int i=0; i<n; i++)
    if (A[i] < 0) neg = i;
  for (int i=neg+1; i<n; i++)
    res += (int)A[i];
  return res;
}
 
int main()
{
  int n;
 
  cout << "Enter numbers elements "; 
  cin >> n;
  
 
  double* arr = new double[n];
 
  cout << "Enter elements of array ";
  
  for (int i=0; i<n; i++)
    cin >> arr[i];
  
  for (int i=0; i<n; i++)
    cout << arr[i] << ' ';
 
  double c = 0.0;
  
  cout << "Enter c ";
  cin >> c;
  
  double sum = summa(arr, n);
  cout << "Sum= " << sum << endl;
 
  int count = counter(arr, n, c);
  cout << "Count= " << c << endl;
 
  system("pause");
 
  return 0;
};
Опоздал...
1
Monte-Cristo
2790 / 1376 / 30
Регистрация: 07.03.2009
Сообщений: 4,446
24.05.2009, 21:48 #10
Цитата Сообщение от CyBOSSeR Посмотреть сообщение
Опоздал...
да ничего у самого бывает часто
0
uto
6 / 6 / 0
Регистрация: 07.05.2009
Сообщений: 94
24.05.2009, 21:56  [ТС] #11
Оба кода работают некоректно.
Monte-Cristo, ввожу еденицу, а он пишет

1
KOl-vo: 3
Suuma: 49
8.8 9.9 10.1 4.4 5.5 6.6 7.7 -1.1 -2.2 -3.3
Что это за цифры, не пойму

CyBOSSeR, а твой код выводит все нормально, только вот не правильно считает сумму элементов меньших С..
0
Monte-Cristo
2790 / 1376 / 30
Регистрация: 07.03.2009
Сообщений: 4,446
24.05.2009, 22:10 #12
Цитата Сообщение от uto Посмотреть сообщение
Оба кода работают некоректно.
это ты некорректно воспринимаешь свое условие)

ввел еденицу...
кол-во чисел меньше еденицы: 3 (так как -1.1, -2.2, -3.3)
сумма = 49.. это сумма целых частей расположенных после последнего отрицательного элемента (4+5+6+7+8+9+10)
(у тебя исходный массив: -1.1, -2.2, -3.3, 4.4, 5.5, 6.6, 7.7, 8.8, 9.9, 10.10 )
и выведен массив, где элементы не превышающие отличие от максимального на 20 процентов, перенесены в начало массива (20 % от 10.10 ~ 2 (т.е. это элементы 8.8, 9.9, 10.10))
0
24.05.2009, 22:10
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
24.05.2009, 22:10
Привет! Вот еще темы с ответами:

Шаблоны функций - C++
Добрый вечер! less.h #pragma once #include &quot;StdAfx.h&quot; //preconditions: //defined operator&lt; template &lt;typename elemType&gt; ...

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

Шаблоны функций - C++
Надо в этом задании добавить &quot;шаблоны ф-ций&quot;, помогите пжл Задачи надо переписывать в текст сообщения!!! Одно сообщение - одна...

Шаблоны функций c++ - C++
Хэллоу фрэндс! Столкнулся с проблеммой в решении упражнения. Вот условие: Создайте шаблонную функцию maxn(), которая принимает в...


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

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

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