Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / C++ [игнор отключен] [закрыт для гостей] / Помогите пожалуйста / 25 сообщений из 25, страница 1 из 1
03.12.2007, 20:04:24
    #34983475
Bezumets
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите пожалуйста
Моей девушке надо сделать слдеующее:

На С++, как можно проще:
1) Дана произвольная строка. В первое половине заменить все двоеточия на точки, а во второй все точки с запятой на троеточия.
2) Написать и протестировать функцию перевода вводимого в троичной СС числа в равное десятичное число.
...
Рейтинг: 0 / 0
03.12.2007, 20:43:47
    #34983513
blinded
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите пожалуйста
Ну так девушка твоя, тебе и флаг в руки
...
Рейтинг: 0 / 0
03.12.2007, 20:46:36
    #34983516
Bezumets
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите пожалуйста
Я то, к сожалению, не программист, так бы с радостью помог...
...
Рейтинг: 0 / 0
03.12.2007, 21:04:34
    #34983524
blinded
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите пожалуйста
Ну тогда пусть мама попрости, мы не кусаемся
...
Рейтинг: 0 / 0
03.12.2007, 21:09:55
    #34983530
Bezumets
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите пожалуйста
Если бы она имела возможность, сама бы попросила :)
...
Рейтинг: 0 / 0
03.12.2007, 21:28:52
    #34983542
blinded
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите пожалуйста
Вторая задачка
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
int triple2decima(char* triple)
{
  int res =  0 ;
  bool negative = false;
  int i =  0 ;
  while (triple[i++] == ' ')
    ; //пропускаем лидирующие пробелы
  for (; triple[i] != '\0'; ++i)
  {
    if (triple[i] == '-')
      negative = true;
    else if (triple[i] == '+')
      ;
    else if (triple[i] >= '0' && triple[i] < '3')
      res = res *  3  + triple[i] - '0';
    else
      throw  1 ; // ошибка формата
  } 
  if (negative)
    res = -res;
  return res;
}
с первой сложнее не понятно что понимается под двоеточием - это две точки или :
Ну символа три точки нет, поэтому придется реаллокировать буфер. А посему вопрос они stl проходили или только массивы
...
Рейтинг: 0 / 0
03.12.2007, 21:30:29
    #34983545
Tubrik
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите пожалуйста
...
Рейтинг: 0 / 0
03.12.2007, 21:33:55
    #34983548
Tubrik
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите пожалуйста
blinded
Ну символа три точки нет, поэтому придется реаллокировать буфер.


мне аж стало интересно, это как? сделай с релокированием буфера, если не сложно :)
...
Рейтинг: 0 / 0
03.12.2007, 21:51:21
    #34983572
Bezumets
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите пожалуйста
blindedс первой сложнее не понятно что понимается под двоеточием - это две точки или :
Ну символа три точки нет, поэтому придется реаллокировать буфер. А посему вопрос они stl проходили или только массивы
Большое спасибо! На счет первой задачи я уточню ;-)
...
Рейтинг: 0 / 0
03.12.2007, 22:04:02
    #34983585
Bezumets
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите пожалуйста
blindedс первой сложнее не понятно что понимается под двоеточием - это две точки или :

Под двоеточием понимается :
...
Рейтинг: 0 / 0
03.12.2007, 22:22:36
    #34983606
blinded
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите пожалуйста
Tubrik blinded
Ну символа три точки нет, поэтому придется реаллокировать буфер.


мне аж стало интересно, это как? сделай с релокированием буфера, если не сложно :)
У мля, клоуна нашли! Ну примерно так, не проверял, как и первую
Код: plaintext
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.
# incude <string.h>
# include <stdlib.h>

char* replace(const char* str)
{
  size_t size = strlen(str);
  char* result = (char*) malloc(size +  1 );
  size_t i, j;
  for ( i = j =  0 ; i < size /  2 ; i++, j++)
  {
    result[i] = result[j]
    if (str[i] == '.' && str[i +  1 ] == '.')
      i++;  
  }

  size_t jsize = size;
  for (; i < size; i++)
  {
    size_t inc =  1 ;
    if (str[i] == ';')
      inc =  3 ;
    if (j + inc +  1  >= jsize)
    {
      jsize *=  2 ;
      result = realloc(result, jsize);
    }
    if (inc ==  1 )
      result[j++] = str[i];
    else
    {
      result[j++] = '.'; 
      result[j++] = '.'; 
      result[j++] = '.'; 
    }
  }
  result[j] = '\0';
  return result;

}
...
Рейтинг: 0 / 0
03.12.2007, 22:25:12
    #34983607
Tubrik
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите пожалуйста
я подумал это в в stl фига такая, релокирование буфера :)
...
Рейтинг: 0 / 0
03.12.2007, 22:36:07
    #34983624
blinded
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите пожалуйста
В stl за тебя это делает аллокатор, а здесь в учебных целях ручками
...
Рейтинг: 0 / 0
04.12.2007, 07:55:01
    #34983838
tester_092
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите пожалуйста
blinded Tubrik blinded
Ну символа три точки нет, поэтому придется реаллокировать буфер.


мне аж стало интересно, это как? сделай с релокированием буфера, если не сложно :)
У мля, клоуна нашли! Ну примерно так, не проверял, как и первую
Код: plaintext
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.
# incude <string.h>
# include <stdlib.h>

char* replace(const char* str)
{
  size_t size = strlen(str);
  char* result = (char*) malloc(size +  1 );
  size_t i, j;
  for ( i = j =  0 ; i < size /  2 ; i++, j++)
  {
    result[i] = result[j]
    if (str[i] == '.' && str[i +  1 ] == '.')
      i++;  
  }

  size_t jsize = size;
  for (; i < size; i++)
  {
    size_t inc =  1 ;
    if (str[i] == ';')
      inc =  3 ;
    if (j + inc +  1  >= jsize)
    {
      jsize *=  2 ;
      result = realloc(result, jsize);
    }
    if (inc ==  1 )
      result[j++] = str[i];
    else
    {
      result[j++] = '.'; 
      result[j++] = '.'; 
      result[j++] = '.'; 
    }
  }
  result[j] = '\0';
  return result;

}

А зачем такие перегибы с malloc/realloc? Может просто посчитать сколько там ";", да потом уж выделить new char[size + count*2] :) - а то потом придется считать сколько памяти выделили и т.д.
...
Рейтинг: 0 / 0
04.12.2007, 09:55:13
    #34983997
Akh
Akh
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите пожалуйста
blindedУ мля, клоуна нашли!

Еще не просили протестировать в cppunit и использовать решить первую задачу regexp-ом ;)
...
Рейтинг: 0 / 0
04.12.2007, 09:56:08
    #34983999
Akh
Akh
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите пожалуйста
tester_092А зачем такие перегибы с malloc/realloc? Может просто посчитать сколько там ";", да потом уж выделить new char[size + count*2] :) - а то потом придется считать сколько памяти выделили и т.д.

Больше этапов. Это как автор захотел. :)
...
Рейтинг: 0 / 0
07.12.2007, 17:31:26
    #34994926
pv94384
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите пожалуйста
ПОМОГИТЕ ПОЖАЛУЙСТА! ВЫ МОЯ ПОСЛЕДНЯЯ НАДЕЖДА!!! Даны упорядоченный по неубыванию массив: (Xi) i=1...n, и произвольный массив: (Yi) i=1...m. Слить их в одну упорядоченную по неубыванию последовательность значений: (Ck) k=1...m+n, скопировав в неё сначала массив X и перенося затем по очереди на нужное место элементы массива Y.
...
Рейтинг: 0 / 0
07.12.2007, 17:36:14
    #34994948
Akh
Akh
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите пожалуйста
blinded, к тебе пришли ;)
...
Рейтинг: 0 / 0
07.12.2007, 18:21:44
    #34995124
Троеточие
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите пожалуйста
blinded дружище символ троеточие есть нажми ALT+0133. ;-))
...
Рейтинг: 0 / 0
07.12.2007, 19:13:22
    #34995283
Tubrik
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите пожалуйста
Akhblinded, к тебе пришли ;)

прикормил)
...
Рейтинг: 0 / 0
07.12.2007, 21:43:30
    #34995442
blinded
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите пожалуйста
Легко!
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
# include <vector>
# include <algorithm>

template<typename InputIterator, typename OutputIterator, class Comparator>
OutputIterator ugly_merge(InputIterator xbeg, InputputIterator xend,
		InputIterator ybeg, InputIterator yend, Comparator cmp, OutputIterator sink)
{
	typedef InputIterator::value_type value_type;
	template<class Container, class Comparator)
	class buffer_inserter
	{
	public:
		buffer_inserter(Container& buf, Comparator& cmp) :  container(buf), comparator(cmp) {}
		void operator()(const Container::value_type& v) { container.insert(v, std::upper_bound(container.begin(), container.end(), v, comparator));}
	private:
		Container& container;
		Comparator& comparator;
	};

	std::vector<value_type> buffer(xbeg, xend);
	std::for_each(ybeg, yend, buffer_inserter(buffer, comp));
	return std::copy(buffer.begin(), buffer.end(), sink);
}
...
Рейтинг: 0 / 0
07.12.2007, 22:06:22
    #34995452
White Owl
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите пожалуйста
blindedЛегко!А Comparator всегда-всегда по нубыванию сортирует? Или ты просто тоже не понял что такое неубывание?
...
Рейтинг: 0 / 0
07.12.2007, 22:30:11
    #34995461
blinded
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите пожалуйста
Так алгоритму это по-барабану главное чтобы у компаратора опреатор < а что он значит это не мое дело
...
Рейтинг: 0 / 0
07.12.2007, 22:38:55
    #34995466
blinded
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите пожалуйста
соврал, для компаратора нужен оператор bool operator()(const T&, const T&);
это если без компаратора то сойдет опретор < для соотв типов. Так что написать следует 2 версии
...
Рейтинг: 0 / 0
07.12.2007, 23:54:45
    #34995509
blinded
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите пожалуйста
Ладно болезный
Код: plaintext
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.
// merge.cpp : Defines the entry point for the console application.
//

#include "stdafx.h"
#include <stdio.h>
#include <string.h>
#include <stdlib.h>

int* merge(int* x, int n, int* y, int m)
{
	int cnt, i, j, k, l, o, p;
	int* z = (int*) malloc(sizeof(int) * (m + n));
	memcpy(z, x, sizeof(int) * n);

	cnt = n;
	for ( int i =  0 ; i < m; i++, cnt++)
	{
		if (y[i] < z[ 0 ])
			j =  0 ;
		else if ( y[i] > z[cnt -  1 ] )
			j = cnt;
		else
		{
			k =  0 ;
			l = cnt -  1 ;
			while ( k < l)
			{
				o = k + (l - k) /  2 ;
				if ( y[i] < z[o])
					l = o -  1 ;
				else if ( y[i] >= z[o] )
					k = o +  1 ;
			}
			j = k;
		}
		p = z[j];
		z[j] = y[i];
		for ( j++; j < cnt +  1 ; j++)
		{
			o = z[j];
			z[j] = p;
			p = o;
		}
	}
	return z;
}
int _tmain(int argc, _TCHAR* argv[])
{
	int x[] = {  1 ,  2 ,  3 ,  3 ,  3 ,  5 ,  6  };
	int y[] = { 9 ,  7 ,  2 ,  2 ,  4 };
	int* res = merge(x, sizeof(x)/sizeof(int), y, sizeof(y)/sizeof(int));
	for (int i =  0 ; i < (sizeof(x) + sizeof(y)) / sizeof(int); i++)
		printf("%d ", res[i]);
	free(res);
	getchar();
	return  0 ;
}
...
Рейтинг: 0 / 0
Форумы / C++ [игнор отключен] [закрыт для гостей] / Помогите пожалуйста / 25 сообщений из 25, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]