Отправляет email-рассылки с помощью сервиса Sendsay
  Все выпуски  

RFpro.ru: Программирование на C / C++


РАССЫЛКИ ПОРТАЛА RFPRO.RU

Лучшие эксперты по данной тематике

Коцюрбенко Алексей aka Жерар
Статус: Мастер-Эксперт
Рейтинг: 847
∙ повысить рейтинг »
CradleA
Статус: Профессионал
Рейтинг: 386
∙ повысить рейтинг »
Асмик Гаряка
Статус: Советник
Рейтинг: 147
∙ повысить рейтинг »

/ КОМПЬЮТЕРЫ И СОФТ / Программирование / C/C++

Номер выпуска:1844
Дата выхода:23.03.2016, 18:21
Администратор рассылки:F®ost (Администратор)
Подписчиков / экспертов:17 / 14
Вопросов / ответов:4 / 4

Консультация # 188977: Здравствуйте, уважаемые эксперты! Прошу вас ответить на следующий вопрос: Помогите, пожалуйста, нужно написать функцию, вот условие: даны строки S и S0. Удалить из строки S первую подстроку, совпадающую с S0. Если совпадающих подстрок нет, то вывести строку S без изменений. Прототип функции char funcstr(char *s, char *s0) ...
Консультация # 188975: Здравствуйте! Прошу помощи в следующем вопросе: Помогите, пожалуйста, переделать функцию char *bintodec(char* , char* ) так, чтобы не использовать стандартные функции. Заранее благодарен за помощь!
...
Консультация # 188976: Здравствуйте! Прошу помощи в следующем вопросе: Помогите исправить ошибку при компиляции проекта. скачать файл laba1_prog.zip [14.6 кб]Проект прилагаю. Среда разработки VS Express2010 Заранее спасибо....
Консультация # 188982: Здравствуйте! Прошу помощи в следующем вопросе: Разработать приложение, которое состоит из библиотеки DLL и программы использующей эту библиотеку с помощью явной загрузки библиотеки в память. В библиотеке находится функция выполняющая задание: Создать программу проверяющую находится ли точка А(X,Y) внутри прямоугольника, заданого координатам...

Консультация # 188977:

Здравствуйте, уважаемые эксперты! Прошу вас ответить на следующий вопрос:
Помогите, пожалуйста, нужно написать функцию, вот условие: даны строки S и S0. Удалить из строки S первую подстроку, совпадающую с S0.
Если совпадающих подстрок нет, то вывести строку S без изменений. Прототип функции char funcstr(char *s, char *s0)

Дата отправки: 17.03.2016, 19:51
Вопрос задал: YarLam125 (Посетитель)
Всего ответов: 1
Страница онлайн-консультации »


Консультирует Лысков Игорь Витальевич (Старший модератор):

Здравствуйте, YarLam125!
Например, так:

char* funcstr(char *s, char *s0)
{
	int	i, j;

	for(i=j=0; s[i];)
	{
		if (s0[j]==0)
		{
			for(; s[i+j]; i++)
				s[i] = s[i+j];
			s[i] = 0;
			break;
		}
		if (s[i+j] == s0[j])
			j++;
		else
		{
			j = 0;
			i++;
		}
	}
	return s;
}

Консультировал: Лысков Игорь Витальевич (Старший модератор)
Дата отправки: 18.03.2016, 12:02

5
нет комментария
-----
Дата оценки: 18.03.2016, 18:27

Рейтинг ответа:

НЕ одобряю +1 одобряю!

Консультация # 188975:

Здравствуйте! Прошу помощи в следующем вопросе:
Помогите, пожалуйста, переделать функцию char *bintodec(char* , char* ) так, чтобы не использовать стандартные функции. Заранее благодарен за помощь!

#include <stdio.h>
#include <stdlib.h>
#include <windows.h>
#include <strings.h>
#include <assert.h>
#include <ctype.h>
#include <wchar.h>
char *bintodec(char* , char* );
int main()
{
    SetConsoleCP(1251);
    SetConsoleOutputCP(1251);
    char *bin, *dec;
    bin=(char*)malloc(100*sizeof(char));///выделяем память в куче
    dec=(char*)malloc(100*sizeof(char));
    printf("Введите двоичную запись числа: ");
    gets(bin);
    printf("Результат: ");
    puts(bintodec(bin, dec));
    system("pause");
    return 0;
}
char *bintodec(char* bin, char* dec){
    int b=0, c=1, i, length=strlen(bin); ///длина строки


    for(i=length-1;  i>=0; i--)
    {
        b+=c*(bin[i]-'0'); ///символ в число
        c*=2;
    }
    sprintf (dec, "%d", b);
    return dec;
}

Дата отправки: 17.03.2016, 18:12
Вопрос задал: YarLam125 (Посетитель)
Всего ответов: 1
Страница онлайн-консультации »


Консультирует Лысков Игорь Витальевич (Старший модератор):

Здравствуйте, YarLam125!
Можно, например, заменить bintodec на две следующие:

uitos(unsigned int val, char* buf)
{
	int		i, count;
	char	temp;
//сначала запишем в обратном порядке
	for(count=0; val; count++)
	{
		buf[count] = (val % 10) + '0';
		val /= 10;
	}
	buf[count] = 0;
//перевернем    
	for(i=0, count--; i<count; i++,count--)
	{
		temp = buf[i];
		buf[i] = buf[count];;
		buf[count] = temp;
	}
}

char *bintodec(char* bin, char* dec)
{
    int b;
    for(b=0; *bin; bin++)
		b = (b<<1)+(*bin)-'0';
	uitos((unsigned int)b, dec);
    return dec;
}

Консультировал: Лысков Игорь Витальевич (Старший модератор)
Дата отправки: 17.03.2016, 21:30
Рейтинг ответа:

НЕ одобряю 0 одобряю!

Консультация # 188976:

Здравствуйте! Прошу помощи в следующем вопросе:

Помогите исправить ошибку при компиляции проекта. скачать файл laba1_prog.zip [14.6 кб]Проект прилагаю.
Среда разработки VS Express2010
Заранее спасибо.

Дата отправки: 17.03.2016, 19:09
Вопрос задал: Пользователь из России (Посетитель)
Всего ответов: 1
Страница онлайн-консультации »


Консультирует Лысков Игорь Витальевич (Старший модератор):

Здравствуйте, Пользователь из России!
1) В функции make_fraction необходимо создавать fraction динамически, возвращать указатель.
Локальная структура fraction создается в стеке и при выходе теряется.
2) Все динамические объекты необходимо уничтожать, когда они уже не нужны.
3) В модуле fraction.cpp не были указаны необходимые include-ы
Плюс закомментировал некоторые лишние вызовы. Это не ошибки, просто лишняя работа. smile
laba_main.cpp

#include "fraction.h"
#include <iostream>

using namespace std;

fraction* make_fraction(double F, int S)
{
	fraction *t=new fraction;	//создали временную переменную
	t->Init(F,S);				//инициализировали поля переменной t с помощью параметров функции
	return t;					//вернули значение переменной t
}

//5. Изменить текст функции main()
void main()
{
	int	i;
	//определение переменных А и В
	fraction A;
	fraction B;
	A.Init(3.0,2);	//инициализация переменной А
	B.Read();		//ввод полей переменных В
	A.Show();		//вывод значений полей переменной А
	B.Show();		//вывод значений полей переменной В

	//вывод значения степени, вычисленного с помощью функции Power()
	cout<<"A.Power("<<A.first<<","<<A.second<<")="<<A.Power()<<endl;
	cout<<"B.Power("<<B.first<<","<<B.second<<")="<<B.Power()<<endl;

	//указатели
	fraction *X=new fraction;//выделение памяти под динамическую переменную
	X->Init(2.0,5);//инициализация
	X->Show();//вывод значений полей
	/*X->Power();*///вычисление степени
	cout<<"X.Power("<<X->first<<","<<X->second<<")="<<X->Power()<<endl;
	delete X;

	//массивы
	fraction mas[3];//определение массива
	for (i=0;i<3; i++)
		mas[i].Read();//чтение значений полей
	for (i=0;i<3; i++)
		mas[i].Show(); //вывод значений полей
	for (i=0;i<3; i++)
	{
		/*mas[i].Power();*/ //вычисление степени
		cout<<"mas["<<i<<"].Power("<<mas[i].first<<","<<mas[i].second<<")=";
		cout<<mas[i].Power()<<endl;
	}

	//динамические масивы
	fraction* p_mas=new fraction[3];//выделение памяти
	for (i=0;i<3; i++)
		p_mas[i].Read();//чтение значений полей
	for (i=0;i<3; i++)
		p_mas[i].Show();//вывод значений полей
	for (i=0;i<3; i++)
	{
		p_mas[i].Power();//вычисление степени
		cout<<"p_mas["<<i<<"].Power("<<p_mas[i].first<<","<<p_mas[i].second;
		cout<<")="<<p_mas[i].Power()<<endl;
	}
	delete [] p_mas;

	//вызов функции make_fraction()

	double y; int z;
	cout<<"first?";cin>>y;
	cout<<"second?";cin>>z;

	//переменная F формируется с помощью функции make_fraction()
	fraction *F=make_fraction(y,z);
	F->Show();
	delete F;
}

fraction.cpp
#include "fraction.h"
#include <iostream>
#include <math.h>

using namespace std;

//реализация метода для инициализации полей структуры
void fraction::Init(double F, int S)
{
	first=F; second=S;
}

//реализация метода для чтения значений полей структуры
void fraction::Read()
{
	cout<<"\nfirst?"; cin>>first;
	cout<<"\nsecond?";cin>>second;
}

//реализация метода для вывода значений полей структуры
void fraction::Show()
{
	cout<<"\nfirst="<<first;
	cout<<"\nsecond="<<second;
	cout<<"\n";
}

//метод для возведения в степень
double fraction::Power()
{
	return pow (first, second);
}

fraction.h
struct fraction
{
	double	first;
	int		second;
	void	Init(double, int);	//метод для инициализации полей
	void	Read();				//метод для чтения значений полей
	void	Show();				//метод для вывода значений полей
	double	Power();			//вычисление степени
};

Консультировал: Лысков Игорь Витальевич (Старший модератор)
Дата отправки: 18.03.2016, 18:11

5
Спасибо большое!
-----
Дата оценки: 18.03.2016, 20:26

Рейтинг ответа:

НЕ одобряю 0 одобряю!

Консультация # 188982:

Здравствуйте! Прошу помощи в следующем вопросе:

Разработать приложение, которое состоит из библиотеки DLL и программы использующей эту библиотеку с помощью явной загрузки библиотеки в память. В библиотеке находится функция выполняющая задание: Создать программу проверяющую находится ли точка А(X,Y) внутри прямоугольника, заданого координатами левого верхнего (X1,Y1) и правого нижнего углов (X2,Y2) или на одной из его сторон.

Дата отправки: 18.03.2016, 00:06
Вопрос задал: r.shiba (Посетитель)
Всего ответов: 1
Страница онлайн-консультации »


Консультирует Лысков Игорь Витальевич (Старший модератор):

Здравствуйте, r.shiba!
Модуль CmpPoints.cpp для создания CmpPoints.dll

#include <windows.h>

BOOL APIENTRY DllMain( HANDLE hModule, 
                       DWORD  ul_reason_for_call, 
                       LPVOID lpReserved
					 )
{
    switch (ul_reason_for_call)
	{
		case DLL_PROCESS_ATTACH:
		case DLL_THREAD_ATTACH:
		case DLL_THREAD_DETACH:
		case DLL_PROCESS_DETACH:
			break;
    }
    return TRUE;
}

extern "C" __declspec(dllexport) int __cdecl IsIn(POINT *A, POINT *P1, POINT *P2)
{
	return ((A->x >= P1->x) &&
			(A->y <= P1->y) &&
			(A->x <= P2->x) &&
			(A->y >= P2->y)); 
}

Модуль main.cpp для вызова функции IsIn из CmpPoints.dl
#include "windows.h"
#include "iostream" 

using namespace std;

typedef int (__cdecl *PISIN)(POINT *A, POINT *P1, POINT *P2);

int main()
{
	PISIN pIsIn = NULL;
	HINSTANCE h = LoadLibrary("CmpPoints.dll");
	if (!h)
	{
		cout << "Can't find CmpPoints.dll" << endl;
		return -1;
	}
	
	pIsIn = (PISIN) GetProcAddress(h,"IsIn");
	
	if (!pIsIn)
	{
		cout << "Error in CmpPoints can't find func IsIn" << endl;
		return -2;
	}

	POINT a = {1,1};
	POINT p1 = {0,2};
	POINT p2 = {2,0};

	int result = pIsIn(&a,&p1,&p2);
	cout<< "result = " << result << endl;
	return 0;
}

Не забудьте скопировать созданную CmpPoints.dll в нужное место
И надеюсь, как создать DLL, вопросов нет?

Консультировал: Лысков Игорь Витальевич (Старший модератор)
Дата отправки: 19.03.2016, 15:38
Рейтинг ответа:

НЕ одобряю 0 одобряю!


Оценить выпуск | Задать вопрос экспертам

главная страница  |  стать участником  |  получить консультацию
техническая поддержка  |  восстановить логин/пароль

Дорогой читатель!
Команда портала RFPRO.RU благодарит Вас за то, что Вы пользуетесь нашими услугами. Вы только что прочли очередной выпуск рассылки. Мы старались. Пожалуйста, оцените его. Если совет помог Вам, если Вам понравился ответ, Вы можете поблагодарить автора - для этого в каждом ответе есть специальные ссылки. Вы можете оставить отзыв о работе портале. Нам очень важно знать Ваше мнение. Вы можете поближе познакомиться с жизнью портала, посетив наш форум, почитав журнал, который издают наши эксперты. Если у Вас есть желание помочь людям, поделиться своими знаниями, Вы можете зарегистрироваться экспертом. Заходите - у нас интересно!
МЫ РАБОТАЕМ ДЛЯ ВАС!


В избранное