Я начинающий, подскажите как...(Все вопросы начинающих - постить только здесь!!!)
В данном случае нужна функция-манипулятор. Примерно так:
custom_format(int val): n(val) {}
int n;
};
custom_format print_out(int val) {
return custom_format(val);
}
ostream& operator << (ostream& stream, const custom_format& val) {
for (int i = 1; i <= val.n; ++i)
stream << i << " ";
return stream;
}
int main() {
int n;
cout << "vvedite 4islo n: ";
cin >> n;
cout << "4isla ot 1 do " << n << " : " << print_out(n) << " ";
..
на почту пришло больше уведомлений с текстом, чем здесь.. наверное модераторы удаляют, да?..
как сделать чтобы значения выдаваемые printf записывались бы в обратном порядке,я так понимаю,что нужно их поместить в массив,но как это сделать не знаю.помогите кто знает.
#include<stdio.h>
#include<conio.h>
int main() {
int k=0,m=1;
int x,r;
printf("vvedi celoe chislo\n");
scanf("%d",&x);
while(x>=1) {
r=x%2;
if(r!=0||r==2)printf("%d",m);
else
printf("%d",k);
x=x/2;
}
getch();
return(0);
}
как сделать чтобы значения выдаваемые printf записывались бы в обратном порядке,я так понимаю,что нужно их поместить в массив,но как это сделать не знаю.помогите кто знает.
#include<stdio.h>
#include<conio.h>
int main() {
int k=0,m=1;
int x,r;
printf("vvedi celoe chislo\n");
scanf("%d",&x);
while(x>=1) {
r=x%2;
if(r!=0||r==2)printf("%d",m);
else
printf("%d",k);
x=x/2;
}
getch();
return(0);
}
Работает на 100% :) когда я сам решал такую проблему пришлось написать свой вариант, но есть еще более удобный вариант, только медленный.
#include <string.h>
int main(void)
{
unsigned short int x = 1;
unsigned char y[256];
unsigned short int n[9];
(void)puts("[ Convert text to binary code (MAX = 255 ) ] ");
(void)fgets(y,255,stdin);
for(unsigned short int i = 0;i < (strlen(y) - 1);i++)
{
for(register unsigned short int j = 0;j <= 8;j++)
{
if(x & y)
n[j] = 1;
else
n[j] = 0;
x <<= 1;
/*-----------------------------------------------*
* for example : x = 1; (00000001)*
*-----------------------------------------------*
* x <<= 1; => x == 2; (00000010)*
* x <<= 1; => x == 4; (00000100)*
* x <<= 1; => x == 8; (00001000)*
* x <<= 1; => x == 16; (00010000)*
* x <<= 1; => x == 32; (00100000)*
* x <<= 1; => x == 64; (01000000)*
* x <<= 1; => x == 128; (10000000)*
*************************************************
*/
}
x = 1;
/*
* Input binary code */
for(register signed int g = 7; g >= 0;g--)
(void)printf("%d",n[g]);
(void)putc(10,stdout);
}
(void)getc(stdin);
return 0;
}
ToString?
object obj = new ......;
string type_name = obj.GetType().ToString();
#include <stdio.h>
void ShowNum(char *s,int l){
int c;
for(c=l;c>0;c--)printf("%c",s[c]);
}
int Dec2Bin(int i,char *s){
int l=0;
do{
l++;
s[l]=i%2+48;
i/=2;
}while(i>0);
return l;
}
int Dec2Hex(int i,char *s){
int l=0;
do{
l++;
s[l]=i%16+48;
if (s[l]>57) s[l]+=7;
//if(i%16<10)s[l]=i%16+48; else s[l]=i%16+55;
i/=16;
}while(i>0);
return l;
}
main(){
int c,l,n;char s[32];
printf("Input number:");
scanf("%d",&n);
ShowNum(s,Dec2Bin(n,s));
printf("\n");
ShowNum(s,Dec2Hex(n,s));
getch();
}
P.S.Разрабатывалось в Dev C++,так что не ругайтесь,если не заработает у вас:rolleyes:
имя_пространства_имён.имя_класса
Ни как не могу вывести имя самого экземпляра.
имя_пространства_имён.имя_класса
Ни как не могу вывести имя самого экземпляра.[/quote]
Товарищ [FENIX], разуйте глазки и оглядитесь вокруг - книжные полки в магазинах ломятся от литературы по C#, MSDN содержит в себе гигибайты инфы, а Интеллисенс в ИДЕ почти удывает мысли разработчиков.
string type_name = obj.GetType().Name;
Upd.
Кто то из нас похоже не владеет терминологией и/или не знает чего хочет (наверно не я, ага?).
Переформулируйте вопрос так что бы стало понятно, чего у вас не выходит, так как понятия "имя экземпляра" не существует в языке.
не могу решить задачку из книги эккеля.
Объявите указатель на функцию, которая получает аргумент типа int и возвращает указатель на функцию с аргументом типа char и возвращаемым значением float.
Пытаюсь сделать так:
{
cout << "foo1 " << a;
return 1;
}
float (*)(char) foo2(int val)
{
cout << "foo2 " << val;
return foo1;
}
int main()
{
float (float)(*(*p1)(int)(char));
}
Есть такая штука -> Функции с переменным числом параметров.
Например, возвращает сумму всех переданных ей параметров.
{
int *p = &n;
int sum = 0;
while (*p)
{
sum+=(*p);
p++;
}
return sum;
}
так как у переменных параметров нет имен, нужно обращаться к ним по указателю. В этом примере если элемент равен 0, проход заканчивается.
Так же нужен первый элемент , что бы установить указатель в нужное русло.
не могу решить задачку из книги эккеля.
{
return 3.14 + float(Symbol);
}
typedef float (*FloatFunc) (char);
FloatFunc Func2(int Value)
{
return Func;
}
int main()
{
FloatFunc LocalFunc = Func2(7);
cout << LocalFunc('q') << endl;
return 0;
}
va_list/va_start/va_arg/va_end
1|val1|val2|val3|\n
2|val1|val2|val3|\n
3|val1|val2|val3|\n
4|val1|val2|val3|\n
и нужно поменять val2 в строке 3. Как это правильно реалезовать?
(Пользуюсь функциями fopen, fputs, fgetc и тд.)
И вообще,посимвольная запись в файл как-то не особо производительна
Вот уж не врите.Сдаётся мне,вы всё-таки посимвольно пишете;)
В любом случае,запись в файл(если она идёт не в конце файла) приведёт к затиранию старого содержимого
В таком случае,опять же,MSDN.И вообще,неужели задать вопрос на форум и ждать ответа быстрее,чем опробовать всё самому?
Вопрос возможно банальный, но все же хочется быть уверенным!
Пишу на C#, у меня есть класс, объекты которого содержатся в некой коллекции, при этом сам класс содержит ссылку на эту коллекцию и ещё на пару объектов.
При удалении из коллекции объект больше не нужен и должен быть удален. Однако, как я понимаю, объект удален не будет, т.к. остаются его собственные ссылки, которые "удержат" его?
Таким образом видимо есть две альтернативы: "обрубание" всех ссылок объекта или использование "слабых" ссылок внутри объекта.
Какой из подходов лучше? Заранее благодарю!
UPD: возможно я что-то путаю со слабыми ссылками.. точнее я уже точно запутался :D
Объект будет расценен как мусор в том (и только в том) случае, когда не будет живых объектов, ссылащихся на него.
Спасибо! Точно :) Я уже тоже понял это, когда засыпал :) Это же надо было так затупить мне :)
Как известно в копмпиляторах C исползуеться константа для определения виндовс _WIN32 или WIN32.
Вопрос > есть ли аналогичная константа для Линукс систем ?
Вопрос взят из книги Дейтела "Как программировать на С". Хоть он может для опытных показаться простым, но я не могу понять как это возможно, ведь выход за границы массива невозможен.
Масив это структура однотипный элементов занимающих непрерывную область памяти. А начало масива содержит указатель на масив, тоесть теоретически как я понимаю если ты будет присваивать началу массива все значения другого масива то получиться что область в памяти эээ низнаю что с ней будет, будет только ошибка.
Насколько я помню масивы копируются путём по элементного копирования.
int main()
{
int i;
int a[3]={1,2,3}, b[3]={4,5,6}, *pti;
for (i=0;i<3;i++)
{
printf(" b=%i ",b);
printf(" a=%i ",a);
};
pti = &a[0];
&a[0]=&b[0];
&b[0]=pti;
printf("\n");
for (i=0;i<3;i++)
{
printf(" b=%i ",b);
printf(" a=%i ",a);
};
getch();
}
у меня ошибка но почему неработает?
Дело в том,что нельзя использовать оператор "&" в присвоении,когда он находится в левой части.Раз вы хотите данные из одного в другой скопировать,то присваивайте не адрес,а значение
P.S.Для оформления кода используйте соответствующие тэги.Читать неудобно
————
А всё время использовать нулевые элементы из массива–это типа круто?Забываем про весь массив и используем только нулевой элемент:)
И ещё:зачем нужен "pti"(который в коде несправедливо обозван "pta")?Какой-то странный код…
#include <conio.h>
int main()
{
int i;
int a[3]={1,2,3}, b[3]={4,5,6}, *pti;
for (i=0;i<3;i++)
{
printf(" b=%i ",b);
printf(" a=%i ",a);
};
pti = a;
a=b;
// &b[0]=pti;
printf("\n");
for (i=0;i<3;i++)
{
printf(" b=%i ",b);
printf(" a=%i ",a);
};
getch();
}
а что ссылки на память нельзя копировать и нельзя им присваивать?
Насколько я помню,адреса присваивать можно.Засим всё.Советую также изучать Си,особенно прочесть раздел про указатели
P.S.Лучше дождаться профессионалов;)
И ещё вопрос изначально был немного в другом–именно значения скопировать,а не адрес
#include <conio.h>
int main()
{
int i,maxa,maxb;
float a[11], b[34];
maxb=sizeof(b)/sizeof(b[0]); // получение максимального
maxa=sizeof(a)/sizeof(float);// колличества элементов в масиве
if (maxa<=maxb)
for (i=0;i<maxa;i++)
b=a;
else printf("error:\n");
getch();
}
Нужно просто выделить место достаточное для размешение нового массива (размер а + размер b)
И скопировать туда оба массива:
#include <conio.h>
int main()
{
int a[3]={1,2,3};
int b[4]={4,5,6,7};
int *c = new int[3 + 4];
Move(a, c, 3*sizeof(int));
Move(b, c + 3, 4*sizeof(int));
for (int i = 0; i < 7; i++)
{
cout << c;
}
getch();
return 0;
}
А чтобы присвоить адрес с в а нужно, чтобы а был задан не статически:
...
//upd: не забыв удалить а :D
delete[] a;
a = c;
UPD2: не прочитал, что на Си реализация... Тогда идея таже, только нужно сделать realloc массиву а!
Задача следующая: написать с использованием любой визуальной среды разработки программу нестандартного форматирования дискет. В программе должны присутствовать следующие опции форматирования:
- использование инженерных цилиндров
- использование переменной длины сектора
- использование дополнительных секторов
- использование чередования секторов
Программу решил писать на Cpp. В инэте не удалось найти почти ничего по теме. Нужны статьи, документация и т.п., которые надоумят, как реализовать такую программу в MS Visual Studio. Как абстрактная теория, так и конкретные примеры. Другими словами, подскажите, что почитать по этой теме. Обращаю внимание ещё раз: форматирование доолжно выполняться из-под Windows, а не DOS.
Для реализации вашей задачи требуется только знание файловой системы,ИМХО
Для реализации вашей задачи требуется только знание файловой системы,ИМХО
Ну,
- использование инженерных цилиндров
- использование переменной длины сектора
- использование дополнительных секторов
- использование чередования секторов
отношения к файловой системе не имеет. Это физическая структура диска, не логическая.