powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / C++ [игнор отключен] [закрыт для гостей] / Помогите пожалуйста
25 сообщений из 25, страница 1 из 1
Помогите пожалуйста
    #34983475
Bezumets
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Моей девушке надо сделать слдеующее:

На С++, как можно проще:
1) Дана произвольная строка. В первое половине заменить все двоеточия на точки, а во второй все точки с запятой на троеточия.
2) Написать и протестировать функцию перевода вводимого в троичной СС числа в равное десятичное число.
...
Рейтинг: 0 / 0
Помогите пожалуйста
    #34983513
Фотография blinded
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну так девушка твоя, тебе и флаг в руки
...
Рейтинг: 0 / 0
Помогите пожалуйста
    #34983516
Bezumets
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Я то, к сожалению, не программист, так бы с радостью помог...
...
Рейтинг: 0 / 0
Помогите пожалуйста
    #34983524
Фотография blinded
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну тогда пусть мама попрости, мы не кусаемся
...
Рейтинг: 0 / 0
Помогите пожалуйста
    #34983530
Bezumets
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Если бы она имела возможность, сама бы попросила :)
...
Рейтинг: 0 / 0
Помогите пожалуйста
    #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
Помогите пожалуйста
    #34983545
Tubrik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
Помогите пожалуйста
    #34983548
Tubrik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
blinded
Ну символа три точки нет, поэтому придется реаллокировать буфер.


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

Под двоеточием понимается :
...
Рейтинг: 0 / 0
Помогите пожалуйста
    #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
Помогите пожалуйста
    #34983607
Tubrik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
я подумал это в в stl фига такая, релокирование буфера :)
...
Рейтинг: 0 / 0
Помогите пожалуйста
    #34983624
Фотография blinded
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В stl за тебя это делает аллокатор, а здесь в учебных целях ручками
...
Рейтинг: 0 / 0
Помогите пожалуйста
    #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
Помогите пожалуйста
    #34983997
Akh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
blindedУ мля, клоуна нашли!

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

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

прикормил)
...
Рейтинг: 0 / 0
Помогите пожалуйста
    #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
Помогите пожалуйста
    #34995452
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
blindedЛегко!А Comparator всегда-всегда по нубыванию сортирует? Или ты просто тоже не понял что такое неубывание?
...
Рейтинг: 0 / 0
Помогите пожалуйста
    #34995461
Фотография blinded
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Так алгоритму это по-барабану главное чтобы у компаратора опреатор < а что он значит это не мое дело
...
Рейтинг: 0 / 0
Помогите пожалуйста
    #34995466
Фотография blinded
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
соврал, для компаратора нужен оператор bool operator()(const T&, const T&);
это если без компаратора то сойдет опретор < для соотв типов. Так что написать следует 2 версии
...
Рейтинг: 0 / 0
Помогите пожалуйста
    #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
25 сообщений из 25, страница 1 из 1
Форумы / C++ [игнор отключен] [закрыт для гостей] / Помогите пожалуйста
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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