Модераторы: bsa
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> помогите с задачей про шаблоны, последняя лаба по ООП 
:(
    Опции темы
титан
  Дата 15.11.2009, 00:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 4
Регистрация: 15.11.2009

Репутация: нет
Всего: нет



Последняя лаба осталась по ООП и тут столкнулся с тем что не могу написать задачу(просто не варит котелок,хотя предыдущие лабы сделал сам):
Опишите параметризованную функцию замены одного элемента массива на другой. Продемонстрируйте использование функции для разных типов дан-ных. (задача про шаблоны, трудность в написании функции) . Помогите написать желательно с объяснениями (хотя я думаю и так пойму). В понедельник уже сдавать(( . Использую Visual studio 2005

Это сообщение отредактировал(а) титан - 15.11.2009, 00:48
PM MAIL   Вверх
andrew_121
Дата 15.11.2009, 09:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Кодофей
****


Профиль
Группа: Завсегдатай
Сообщений: 3448
Регистрация: 3.1.2008

Репутация: 10
Всего: 33



Цитата(титан @  15.11.2009,  00:47 Найти цитируемый пост)
Последняя лаба осталась по ООП и тут столкнулся с тем что не могу написать задачу(просто не варит котелок,хотя предыдущие лабы сделал сам):

Ну очень интересно.

Код

template<typename T> func(T* array, const T& before, const T& after) {
...
}



--------------------
Удалил аккаунт. Прощайте!
PM MAIL   Вверх
титан
Дата 15.11.2009, 11:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 4
Регистрация: 15.11.2009

Репутация: нет
Всего: нет



Ладно поясню: мне интересует сама функция. Как ее реализовать.
Код

#define SIZE 10


// создание шаблона класса stack
template <class StackType> class stack        
{ StackType stck[SIZE];      
 int tos;                
public:
   void init() { tos = 0; }      
   void push(StackType ob);    
   StackType pop();        
};
template <class StackType> 
{   //здесь сама функция 
}
int main()
{  int i;
    char sym = 'a';
    stack <char> st_ch;
    st_ch.init();
//используем функцию
cout << endl;
    stack <int> st_int;
    st_int.init();
//используем функцию
    cout << endl;
     stack <float> st_fl;
    st_fl.init();
//используем функцию
cout << endl;
    return 0;
}

Собственно надо функцию написать и ошибки поправить

Это сообщение отредактировал(а) титан - 15.11.2009, 11:38
PM MAIL   Вверх
zim22
Дата 15.11.2009, 13:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


depict1
****


Профиль
Группа: Завсегдатай
Сообщений: 2682
Регистрация: 15.1.2009
Где: Украина

Репутация: 29
Всего: 69



Цитата(титан @  14.11.2009,  23:47 Найти цитируемый пост)
Опишите параметризованную функцию замены одного элемента массива на другой. 

std::replace из <algorithm>
взято отсюда
Код

template < class ForwardIterator, class T >
  void replace ( ForwardIterator first, ForwardIterator last,
                 const T& old_value, const T& new_value )
{
  for (; first != last; ++first)
    if (*first == old_value) *first=new_value;
}



--------------------
PM MAIL   Вверх
титан
  Дата 15.11.2009, 15:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 4
Регистрация: 15.11.2009

Репутация: нет
Всего: нет



Код

#include <iostream>
# include <fstream>
#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
#include <math.h>
#include <algorithm>
using namespace std;
#define SIZE 10
template < class StackType > class stack 
{StackType stck[SIZE];    // массив, содержащий стек
   int tos;                // индекс вершины стека
 public:
     void init() { tos = 0; }    
     void replace ( StackType first, StackType last,
                 const stack& old_value, const stack& new_value );
}    ;
template < class StackType >
    void stack <StackType>::replace ( StackType first, StackType last,
                 const stack& old_value, const stack& new_value )
                 {    for (; first != last; ++first)
    if (*first == old_value) *first=new_value;
    cout << "stack contains:";
  for (stack <class StackType>::iterator it=StackType.begin(); it!=StackType.end(); ++it)
     cout << " " << *it;
    };

int main()
{  char N,V,i;
cout<<"N= "; // что заменяем
cin>>N;
cout<<"V= ";//на что заменяем
cin>>V;
char sym ='a';
      stack <char> st_ch;            
    st_ch.init();
    for (i = 0; i < 7; i++) 
    {st_ch.replace(st_ch.begin(), st_ch.end(), N, V); }

 cout << endl;
 
  return 0;
} 

Как исправить ошибки?
2 ошибки: 1)error C2039: 'begin' : is not a member of 'stack<StackType>'
2) error C2039: 'end' : is not a member of 'stack<StackType>'

2 вариант:
Код

#include "stdafx.h"
#include <dos.h>
#include <string.h>
#include <iostream>
# include <fstream>
#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
#include <math.h>
#include <algorithm>
#include <vector>
using namespace std;

template < class ForwardIterator  > class T
{  void replace ( ForwardIterator first, ForwardIterator last,
                 const T& old_value, const T& new_value )
{    for (; first != last; ++first)
    if (*first == old_value) *first=new_value;
}};



int main () {
    int N;
    cout<<"N= ";
    cin>>N;
  int  myints[] = { 10, 20, 30, 30, 20, 10, 10, 20 };
  vector<int > myvector (myints, myints+8);            // 10 20 30 30 20 10 10 20

  replace (myvector.begin(), myvector.end(), 20, N); // 10 99 30 30 99 10 10 99

  cout << "myvector contains:";
  for (vector<int >::iterator it=myvector.begin(); it!=myvector.end(); ++it)
    cout << " " << *it;

  cout << endl;
 
  return 0;
}

нужно сделать замену букв ( то есть char). 

Это сообщение отредактировал(а) титан - 15.11.2009, 16:20
PM MAIL   Вверх
niXman
Дата 16.11.2009, 07:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 211
Регистрация: 4.7.2009

Репутация: нет
Всего: 0



В первом примере, ты используешь методы begin(), end(). А где они декларированы в твоем классе? Насколько мне известно, стек не имеет таких методов. Можно придумать конечно, но зачем так извращаться?

Во втором примере, ты пытаешься декларировать шаблонную функцию как класс, хотя используешь ее как функцию. Определись, тебе нужен шаблонный класс, или шаблонная функция?

Это сообщение отредактировал(а) niXman - 16.11.2009, 07:22
--------------------
if ( !c++ ) {   *power--;   this->wussiness += 10;}
PM MAIL   Вверх
титан
Дата 16.11.2009, 16:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 4
Регистрация: 15.11.2009

Репутация: нет
Всего: нет



сдал 2 вариант спс всем
PM MAIL   Вверх
bsa
Дата 16.11.2009, 18:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 9185
Регистрация: 6.4.2006
Где: Москва, Россия

Репутация: 85
Всего: 196




M
bsa
титан, если ответ на вопрос получен, то пометь тему решенной

PM   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Для новичков"
JackYF
bsa

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.0609 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.