Показать полную графическую версию : нужны задания практические по С
простенькая программка, меняет местами значения переменных. Передаю адреса переменных в функцию которая меняет(должна =) ) местами.
#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
в чем я опять облажался? =(
bool
Не знаю. У меня и gcc и VS6 (по техническим причинам более новых студий временно нет). Может быть дело из-за кривой оптимизации.
P.S. Чтобы данная программа вообще скомпилировалась надо изменить тип функции change на void. И её прототип лучше поместить до main, а не внутри.
ivank
у меня бесплатный visual C++ express(регистрация на microsoft.com бесплатная), на нем скомпилировалось , но так вот криво 8( сейчас качаю борланд билдер, попробую на нем.
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;
}
bezumes
ivank верно сказал, функция ведь ничего не возвращает, да и копилятор действительно странно работал. Запустил то же самое в борланде, и без проблем скомпилировалось и получил правильный результат. Странно то, что потом я ещё раз попробывал скомпилировать это все в VC++ express и все скомпилилось и такой же верный результат как и в борланде. 0.о
вопрос по функции 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>
Цитирую запись полугодовой давности
Чистый C сейчас практически нигде не используется, посему советую (лично моё мнение) взяться за C++ Скажите, а зачем переходить? если ты виртуоз с топором и стругаешь детали так, как не получится у начинающего хирурга со скальпелем, то для чего нужны переходы с одного языка на другой? Практически все задачи можно решить любым из языков.
Я не говорю о специализированных языках, конкретно заточенных под что-то.
СТОП! СТОП! СТОП! Не превращайте тему в очередной спор на тему: "какой язык программирования круче" !!!
#include "stdafx.h"
#include <iostream>
#include <conio.h>
#include <stdio.h>
Необходимо подключить еще #include <windows.h>
bezumes
когда подключаю <windows.h> , компилятор ругается на его отсутствие вообще у себя.
когда подключаю <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);
}
1) в MS Visual C++ Express, если успешно прошла компиляция , то при дальнейшем изменении проекта и повторной компиляции он продолжает компилиться по старому, не изменённому, варианту. Пробывал сохранять после изменения, а потом уже компилировать, не помогает =/ Что я делаю не правильно?
2) модераторам: возможно ли название этой темы сменить на "C,C++ | азы" ?
я использую такую фигнюшку, если не принципиально что только под виндой рабоатет
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;
}
программка для побайтного вывода значения типа 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? потому что они в объединении и следовательно в одной области памяти? объясните пожалуйста поподробнее
ещё такой полуоффтопный вопрос : что значит Присылайте ваши резюме на блабла@блаблабла.ru с кодом C++/010 . Что есть C++/010???
по поводу вопроса:
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]
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
Энтузиазм закончился? Если нет, то вот одна задачка, вернее вопрос, для тех кто и с С++ уже немного знаком, из одного популярного журнала:
"Определить какой из кодов, к какому из синтаксисов (С или С++) относится и объяснить почему, по каким параметрам был найден ответ".
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
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.