Войти

Показать полную графическую версию : нужны задания практические по С


Страниц : 1 2 [3]

bool
22-04-2007, 20:45
простенькая программка, меняет местами значения переменных. Передаю адреса переменных в функцию которая меняет(должна =) ) местами.

#include "stdafx.h"
#include <iostream>
using namespace std;


int main()
{
int change(int* i,int* j);
int a = 6;
int b = 7;
change(&a,&b);
cout << "a =" << a << "\n";
cout << "b =" << b << "\n";
return 0;
}

int change(int* i,int* j)
{
int q = *i;
*i = *j;
*j = q;
}



в результате все равно:

a = 6
b = 7

в чем я опять облажался? =(

ivank
22-04-2007, 21:11
bool
Не знаю. У меня и gcc и VS6 (по техническим причинам более новых студий временно нет). Может быть дело из-за кривой оптимизации.

P.S. Чтобы данная программа вообще скомпилировалась надо изменить тип функции change на void. И её прототип лучше поместить до main, а не внутри.

bool
22-04-2007, 21:39
ivank
у меня бесплатный visual C++ express(регистрация на microsoft.com бесплатная), на нем скомпилировалось , но так вот криво 8( сейчас качаю борланд билдер, попробую на нем.

bezumes
23-04-2007, 07:48
bool Так не подойдет?

#include "stdafx.h"
#include <iostream>
using namespace std;
int main()
{
int change(int *i,int *j);
int a = 6;
int b = 7;
int &c=a;
int &d=b;
cout << "a =" << c << "\n";
cout << "b =" << d << "\n";
change(&a,&b);

cout << "a =" << c << "\n";
cout << "b =" << d << "\n";
cin>>a;
return 0;
}

int change(int *i,int *j)
{
int q = *i;

*i = *j;
*j = q;

return 0;
}

bool
24-04-2007, 00:24
bezumes

ivank верно сказал, функция ведь ничего не возвращает, да и копилятор действительно странно работал. Запустил то же самое в борланде, и без проблем скомпилировалось и получил правильный результат. Странно то, что потом я ещё раз попробывал скомпилировать это все в VC++ express и все скомпилилось и такой же верный результат как и в борланде. 0.о

bool
05-05-2007, 21:25
вопрос по функции CharToOem(), присутствует ли она в компиляторах борланд и VC++ Express , запускаю программу и в обоих компиляторах идет ругань на эту функцию:

[C++ Error] Unit1.cpp(12): E2268 Call to undefined function 'CharToOem' - борланд
error C3861: 'CharToOem': identifier not found - VC++ Express

все заголовки:
#include "stdafx.h"
#include <iostream>
#include <conio.h>
#include <stdio.h>

yurfed
05-05-2007, 22:17
Цитирую запись полугодовой давности
Чистый C сейчас практически нигде не используется, посему советую (лично моё мнение) взяться за C++ Скажите, а зачем переходить? если ты виртуоз с топором и стругаешь детали так, как не получится у начинающего хирурга со скальпелем, то для чего нужны переходы с одного языка на другой? Практически все задачи можно решить любым из языков.
Я не говорю о специализированных языках, конкретно заточенных под что-то.

bool
06-05-2007, 00:56
СТОП! СТОП! СТОП! Не превращайте тему в очередной спор на тему: "какой язык программирования круче" !!!

bezumes
06-05-2007, 09:46
#include "stdafx.h"
#include <iostream>
#include <conio.h>
#include <stdio.h>

Необходимо подключить еще #include <windows.h>

bool
06-05-2007, 21:30
bezumes
когда подключаю <windows.h> , компилятор ругается на его отсутствие вообще у себя.

bezumes
06-05-2007, 22:06
когда подключаю <windows.h> , компилятор ругается на его отсутствие вообще у себя.
Хм.Значит придется обходится без CharToOem. Попробуйте тогда вот так.Хоть что-нибудь должно же работать:)

#include <locale>

std::wcout.imbue(std::locale(".866"));
wchar_t str[] = L"Привет!!!";
wcout << str << endl;



#include <locale>

std::wcout.imbue(std::locale(".866"));
std::wstring string(L"Привет");
wcout << string << endl;
wcout << L"Привет !!!" << endl;

unsigned char ch;
ch='Ж';
cout<<ch<<"\t"<<hex<<(int)ch<<endl;

ch='\x86';
cout<<ch<<"\t"<<hex<<(int)ch<<endl;

Вот кстати и windows.h

EvgeniyQQQ
07-05-2007, 00:14
bool

MSDN
Function Information
Minimum DLL Version user32.dll
Header Declared in Winuser.h, include Windows.h
Import library User32.lib


компилятор ругается на его отсутствие вообще у себя

странно, в Builder точно, должно работать.

EvgeniyQQQ
07-05-2007, 19:41
Преобразовать ASCII в Unicode можно с помощью "сишной" функции mbstowcs().

#include <stdio.h>
#include <tchar.h>

#include "stdlib.h"

void main()
{
char str[] = "example";
wchar_t str_t[sizeof("example")];
//Функция преобразующая ASCII в Unicode
mbstowcs(str_t,str,sizeof("example"));
wprintf(_T("%s\n"),str_t);
}

bool
31-05-2007, 23:48
1) в MS Visual C++ Express, если успешно прошла компиляция , то при дальнейшем изменении проекта и повторной компиляции он продолжает компилиться по старому, не изменённому, варианту. Пробывал сохранять после изменения, а потом уже компилировать, не помогает =/ Что я делаю не правильно?
2) модераторам: возможно ли название этой темы сменить на "C,C++ | азы" ?

pva
04-06-2007, 12:37
я использую такую фигнюшку, если не принципиально что только под виндой рабоатет

std::wstring wstr(const char* s, unsigned size);
std::wstring wstr(const char* s) {return wstr(s, std::strlen(s));}

...

std::wstring wstr(const char* s, unsigned size)
{
std::wstring w(size, wchar_t());
MultiByteToWideChar(CP_ACP, 0, s, w.size(), &w[0], w.size());
return w;
}

bool
27-06-2007, 00:46
программка для побайтного вывода значения типа double в двоичном представлении:


#include "stdafx.h"
#include <iostream>
using namespace std;

union bits {
bits(double n);
void show_bits();
double d;
unsigned char c[sizeof (double)];
};

bits::bits(double n)
{
d = n;
}

void bits::show_bits()
{
int i, j;

for( j = sizeof(double) -1; j >=0; j--) {
cout << "Double declaration of the bit" << j << ":";
for( i = 128; i; i >>=1)
if(i & c[j]) cout << "1";
else cout << "0";
cout << "\n";
}
}

int main()
{
bits ob(1991.829);
ob.show_bits();
return 0;
}



меня интересует вот эта часть:

if(i & c[j]) cout << "1";
else cout << "0";



ведь мы определяем d, а не с[] , почему сравнивают побайтно i и c? потому что они в объединении и следовательно в одной области памяти? объясните пожалуйста поподробнее

bool
28-06-2007, 19:46
ещё такой полуоффтопный вопрос : что значит Присылайте ваши резюме на блабла@блаблабла.ru с кодом C++/010 . Что есть C++/010???

pva
29-06-2007, 11:33
по поводу вопроса:
union - это "объединение", все поля будут занимать одну и ту же память. Это сделано в древнем языке "си" для того, чтобы можно было легко переделать из одного вида в другой. Компилятор автоматически выбирает под такие объединения столько памяти, сколько необходимо, чтобы хранить все члены объединения. Например:

union {
int i;
char c[3];
} union1;

union1.i = 0x12345678;

// хранится как:
// хранится как:
// адрес значение
// 440000 0x78 // i=0x12345678 //c[0]=0x78
// 440001 0x56 //c[1]=0x56
// 440002 0x34 //c[2]=0x34
// 440003 0x12

У вас биты отображаются в обратном порядке:
[code]
void bits::show_bits()
{
int i, j;

// мы перебираем память задом-наперёд?

for( j = sizeof(double) -1; j >=0; j--) {
cout << "Double declaration of the bit" << j << ":";
for( i = 128; i; i >>=1) // перебираем биты задом-наперёд?
if(i & c[j]) cout << "1";
else cout << "0";
cout << "\n";
}
}
[code]

bool
29-06-2007, 17:38
pva
спасибо =)
т.е. в первой итерации 128 побитно сравнивают с c[j]? объясните пожалуйста как получился первый байт? я попробывал вывести значение
c[j], и так какая то хрень получилась, вроде @0000000, оно и понятно, ведь тип то char. Понял я то, что мы идем по разрядам байта с конца, т.е сначала 128, потом 64 , 32 и т.д. А вот как получается результат? Вот кстати и он:


байт 7: 01000000
байт 6: 10011111
байт 5: 00011111
байт 4: 01010000
байт 3: 11100101
байт 2: 01100000
байт 1: 01000001
байт 0: 10001001

Admiral
03-05-2008, 20:11
Энтузиазм закончился? Если нет, то вот одна задачка, вернее вопрос, для тех кто и с С++ уже немного знаком, из одного популярного журнала:
"Определить какой из кодов, к какому из синтаксисов (С или С++) относится и объяснить почему, по каким параметрам был найден ответ".

forum (o, s)
int o, s;
{
int z;
for (z = 1; n>0; --n)
z = z*t;
return z;
}


//Some text to view on output device
printf("%d %d\n", e*=2, f+=3);


for (int z = 0; z< MAXIMUM -1 && o! = '\n'; ++p; summa+=z)
int forums: 4
Только не надо разыскивать ни журнал, ни его номер в поисках ответа, попробуйте ответить своими силами, знаниями и пониманиями.




© OSzone.net 2001-2012