Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Я начинающий, подскажите как...(Все вопросы начинающих - постить только здесь!!!)

1
24 ноября 2007 года
kot_
7.3K / / 20.01.2000
Эта тема предназначена для вопросов начинающих в программировании. Если вы только начинаете программировать и столкнулись с тем, что ваш HelloWord (как вариант - новая суперОС) - не компилируется по непонятной причине, хотя код вы один в один взяли из книжки (интернета, придумали сами), то скорей всего ваш вопрос НУЖНО размещать только в этой теме. Перед тем как его создать - обязательно воспользоваться поиском. Только в этой теме вы не рискуете нарваться на - RTFM, иди в ЧАВО, иди в гугль и в конце концов просто иди на ... - при условии конечно что в данной теме вопрос не задавался. Или если вы не задаете вопрос типа "расскажите мне подробно что такое шаблоны в С++" - т.е. вопрос, в ответ на который проще послать в вышеуказанное. Если же вы решили что, ваш вопрос настолько нов и свеж что никто до этого не спрашивал на форуме "как мне прочесть файл с использованием потока" и создали отдельную тему - не обессудьте - в лучшем случае тема будет закрыта, в худшем удалена - и вы получите нарушение.
Страницы:
1.8K
10 марта 2009 года
igor_nf
256 / / 13.12.2006
Цитата: WhiteC

 
Код:
cout << print_out(n);



В данном случае нужна функция-манипулятор. Примерно так:

Код:
struct custom_format {
    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) << " ";

..
47K
10 марта 2009 года
WhiteC
6 / / 08.03.2009
осталось изучить структуру в с++ и то что значат амперсанды:)..спасибо большое...работает..:)
на почту пришло больше уведомлений с текстом, чем здесь.. наверное модераторы удаляют, да?..
440
11 марта 2009 года
[FENIX]
83 / / 29.01.2007
Народ, как мне получить имя созданного экземпляра класса? С#.
47K
11 марта 2009 года
lavan
4 / / 07.03.2009
программа (на С)должна переводить десятичное целое число в двоичное
как сделать чтобы значения выдаваемые 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);
}
15K
11 марта 2009 года
kant
64 / / 02.06.2007
Цитата: lavan
программа (на С)должна переводить десятичное целое число в двоичное
как сделать чтобы значения выдаваемые 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 <stdio.h>
#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;
}
268
12 марта 2009 года
Михаил
587 / / 25.06.2005
[quote='[FENIX];278079']Народ, как мне получить имя созданного экземпляра класса? С#.[/quote]
ToString?
5
12 марта 2009 года
hardcase
4.5K / / 09.08.2005
[quote='[FENIX];278079']Народ, как мне получить имя созданного экземпляра класса? С#.[/quote]
object obj = new ......;
string type_name = obj.GetType().ToString();
47K
12 марта 2009 года
lavan
4 / / 07.03.2009
спасибо kant.просто я еще эти функции не учил.а можно как нибудь довести до ума мой код?т.е на основе моего кода,создать массив в который можно помещать значения выдаваемые в printf.
7
12 марта 2009 года
@pixo $oft
3.4K / / 20.09.2006
lavan: вот моя версия(тут есть процедура,так что её можно потом куда-нибудь вставить,вместо того,чтоб выдирать из main'а:))
Код:
#include <conio.h>
#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:
440
18 марта 2009 года
[FENIX]
83 / / 29.01.2007
hardcase, спасибо конечно, но почему-то выводится вот что:
имя_пространства_имён.имя_класса

Ни как не могу вывести имя самого экземпляра.
48K
19 марта 2009 года
бездарь
1 / / 19.03.2009
Здравствуйте, подскажите как отредактировать элемент listbox'a в С#?
5
19 марта 2009 года
hardcase
4.5K / / 09.08.2005
[quote='[FENIX];278956']hardcase, спасибо конечно, но почему-то выводится вот что:
имя_пространства_имён.имя_класса

Ни как не могу вывести имя самого экземпляра.[/quote]
Товарищ [FENIX], разуйте глазки и оглядитесь вокруг - книжные полки в магазинах ломятся от литературы по C#, MSDN содержит в себе гигибайты инфы, а Интеллисенс в ИДЕ почти удывает мысли разработчиков.

 
Код:
object obj = new ......;
string type_name = obj.GetType().Name;


Upd.
Кто то из нас похоже не владеет терминологией и/или не знает чего хочет (наверно не я, ага?).
Переформулируйте вопрос так что бы стало понятно, чего у вас не выходит, так как понятия "имя экземпляра" не существует в языке.
42K
24 марта 2009 года
dimetcm
10 / / 11.03.2009
Помогите нубу.
не могу решить задачку из книги эккеля.
Объявите указатель на функцию, которая получает аргумент типа int и возвращает указатель на функцию с аргументом типа char и возвращаемым значением float.
Пытаюсь сделать так:
Код:
float foo1(char a)
{
    cout << "foo1 " << a;
    return 1;
}

float (*)(char) foo2(int val)
{
    cout << "foo2 " << val;
    return foo1;
}


int main()
{
    float (float)(*(*p1)(int)(char));
}
18K
24 марта 2009 года
cpPLover
25 / / 30.11.2006
Подскажете пожалуйста можно ли объявить функцию с неограниченым количеством параметров например summ (val1, val2, val3 ... valn) тоесть чтобы я в нее мог в разной ситуации передать нужное мне количество параметров. Массивом не хочу. Мне кажеться что я где то это видел но не могу найти =( Если можно, прошу написать как. Спасибо.
42K
25 марта 2009 года
dimetcm
10 / / 11.03.2009
Цитата:
Подскажете пожалуйста можно ли объявить функцию с неограниченым количеством параметров например summ (val1, val2, val3 ... valn) тоесть чтобы я в нее мог в разной ситуации передать нужное мне количество параметров. Массивом не хочу. Мне кажеться что я где то это видел но не могу найти =( Если можно, прошу написать как. Спасибо.


Есть такая штука -> Функции с переменным числом параметров.
Например, возвращает сумму всех переданных ей параметров.

Код:
int f(int n, ...)
{
    int *p = &n;
    int sum = 0;
    while (*p)
    {
        sum+=(*p);
        p++;
    }
     return sum;
}

так как у переменных параметров нет имен, нужно обращаться к ним по указателю. В этом примере если элемент равен 0, проход заканчивается.
Так же нужен первый элемент , что бы установить указатель в нужное русло.
535
25 марта 2009 года
Нездешний
537 / / 17.01.2008
Цитата: dimetcm
Помогите нубу.
не могу решить задачку из книги эккеля.


Код:
float Func(char Symbol)
{
    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;
}
14
25 марта 2009 года
Phodopus
3.3K / / 19.06.2008
Цитата: cpPLover
Подскажете пожалуйста можно ли объявить функцию с неограниченым количеством параметров например summ (val1, val2, val3 ... valn) тоесть чтобы я в нее мог в разной ситуации передать нужное мне количество параметров. Массивом не хочу. Мне кажеться что я где то это видел но не могу найти =( Если можно, прошу написать как. Спасибо.


va_list/va_start/va_arg/va_end

18K
25 марта 2009 года
cpPLover
25 / / 30.11.2006
Подскажите еще. Можно ли заменить какую либо строку в середине файла не перезаписывая его весь. Например файл из 10 строк типа:
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 и тд.)
7
25 марта 2009 года
@pixo $oft
3.4K / / 20.09.2006
Если длины всех строк одинаковы,то просто–надо писать в нужную строку;если же нет,то придётся перезаписывать файл с середины(в общем случае–с позиции вхождения строки)
18K
25 марта 2009 года
cpPLover
25 / / 30.11.2006
Они не одинаковы. Если я установлю позицию на 3ю строку и начну записывать туда инф. то строка которая была раньше подвинется или будет заменена?
7
25 марта 2009 года
@pixo $oft
3.4K / / 20.09.2006
Конечно,будет заменена.Вы вообще описание этих функции читали в MSDN(смю ссылку ниже)?Эти функции пишут по одному символу в файл в позицию,указанную указателем(прошу прощения за тавтологию)
И вообще,посимвольная запись в файл как-то не особо производительна
18K
25 марта 2009 года
cpPLover
25 / / 30.11.2006
Я построчно пишу ) Посимвольно читаю. Я пока мало знаю, вот разбираю все по порядку. Спасибо еще раз.
7
25 марта 2009 года
@pixo $oft
3.4K / / 20.09.2006

Вот уж не врите.Сдаётся мне,вы всё-таки посимвольно пишете;)

В любом случае,запись в файл(если она идёт не в конце файла) приведёт к затиранию старого содержимого

18K
25 марта 2009 года
cpPLover
25 / / 30.11.2006
fputS +) а не putC
7
25 марта 2009 года
@pixo $oft
3.4K / / 20.09.2006
Хммм!..Да,действительно.Приношу свои извинения,недосмотрел:)
В таком случае,опять же,MSDN.И вообще,неужели задать вопрос на форум и ждать ответа быстрее,чем опробовать всё самому?
1.9K
25 марта 2009 года
GreenRiver
451 / / 20.07.2008
Добрый день!

Вопрос возможно банальный, но все же хочется быть уверенным!
Пишу на C#, у меня есть класс, объекты которого содержатся в некой коллекции, при этом сам класс содержит ссылку на эту коллекцию и ещё на пару объектов.
При удалении из коллекции объект больше не нужен и должен быть удален. Однако, как я понимаю, объект удален не будет, т.к. остаются его собственные ссылки, которые "удержат" его?

Таким образом видимо есть две альтернативы: "обрубание" всех ссылок объекта или использование "слабых" ссылок внутри объекта.

Какой из подходов лучше? Заранее благодарю!

UPD: возможно я что-то путаю со слабыми ссылками.. точнее я уже точно запутался :D
5
25 марта 2009 года
hardcase
4.5K / / 09.08.2005
Цитата: GreenRiver
При удалении из коллекции объект больше не нужен и должен быть удален. Однако, как я понимаю, объект удален не будет, т.к. остаются его собственные ссылки, которые "удержат" его?

Объект будет расценен как мусор в том (и только в том) случае, когда не будет живых объектов, ссылащихся на него.

1.9K
26 марта 2009 года
GreenRiver
451 / / 20.07.2008
Цитата: hardcase
Объект будет расценен как мусор в том (и только в том) случае, когда не будет живых объектов, ссылащихся на него.


Спасибо! Точно :) Я уже тоже понял это, когда засыпал :) Это же надо было так затупить мне :)

15K
26 марта 2009 года
kant
64 / / 02.06.2007
Доброго времени суток !

Как известно в копмпиляторах C исползуеться константа для определения виндовс _WIN32 или WIN32.
Вопрос > есть ли аналогичная константа для Линукс систем ?
47K
28 марта 2009 года
v0l0d1ka
5 / / 28.03.2009
Здравствуйте, я начинающий. Вопрос по программированию на С. Есть два массива float a[11], b[34]; Подскажите какие операторы нужно написать, чтобы скопировать массив а[] в начало массива b[].
Вопрос взят из книги Дейтела "Как программировать на С". Хоть он может для опытных показаться простым, но я не могу понять как это возможно, ведь выход за границы массива невозможен.
47K
29 марта 2009 года
centnew
15 / / 29.03.2009
Что-то вопрос не правильно поставлен мне кажется, как можно масив вставить в начало масива.
Масив это структура однотипный элементов занимающих непрерывную область памяти. А начало масива содержит указатель на масив, тоесть теоретически как я понимаю если ты будет присваивать началу массива все значения другого масива то получиться что область в памяти эээ низнаю что с ней будет, будет только ошибка.
Насколько я помню масивы копируются путём по элементного копирования.
47K
29 марта 2009 года
centnew
15 / / 29.03.2009
здесь же добавлю, а что будет если мы сделаем такое.
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();
}
у меня ошибка но почему неработает?
7
29 марта 2009 года
@pixo $oft
3.4K / / 20.09.2006
 
Код:
&a[0]=&b[0];
Наверное,поэтому и ошибка.И дальше тоже
Дело в том,что нельзя использовать оператор "&" в присвоении,когда он находится в левой части.Раз вы хотите данные из одного в другой скопировать,то присваивайте не адрес,а значение

P.S.Для оформления кода используйте соответствующие тэги.Читать неудобно
————
А всё время использовать нулевые элементы из массива–это типа круто?Забываем про весь массив и используем только нулевой элемент:)

И ещё:зачем нужен "pti"(который в коде несправедливо обозван "pta")?Какой-то странный код…
47K
29 марта 2009 года
centnew
15 / / 29.03.2009
Хорошо, вообще то смысл был не в значениях а копировании масива путём подмены его начального адреса, мне интересно это можно сделать или нет.
Код:
#include <stdio.h>
#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();
}
при коомпиляции выдаёт [C++ Error] Unit1.cpp(13): E2277 Lvalue required
а что ссылки на память нельзя копировать и нельзя им присваивать?
7
29 марта 2009 года
@pixo $oft
3.4K / / 20.09.2006
Вот насчёт копировать и присваивать ссылки–это вроде можно,но надо знать как.Я только начал Си изучать,поэтому не буду точно утверждать,дабы меня потом не ругали "Точно не знаешь,а пишешь".Поэтому отвечу примерно:)
Насколько я помню,адреса присваивать можно.Засим всё.Советую также изучать Си,особенно прочесть раздел про указатели

P.S.Лучше дождаться профессионалов;)
И ещё вопрос изначально был немного в другом–именно значения скопировать,а не адрес
47K
29 марта 2009 года
centnew
15 / / 29.03.2009
если имелось в виду значения то я думаю это подойдёт
Код:
#include <stdio.h>
#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();
}
1.9K
29 марта 2009 года
GreenRiver
451 / / 20.07.2008
Ну вы жгете :)
Нужно просто выделить место достаточное для размешение нового массива (размер а + размер b)
И скопировать туда оба массива:

Код:
#include <iostream.h>
#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;
}


А чтобы присвоить адрес с в а нужно, чтобы а был задан не статически:
 
Код:
int *a = new int[3];
    ...
    //upd: не забыв удалить а :D
    delete[] a;
    a = c;


UPD2: не прочитал, что на Си реализация... Тогда идея таже, только нужно сделать realloc массиву а!
10K
29 марта 2009 года
Shalfey
47 / / 10.03.2007
Доброго времени суток.
Задача следующая: написать с использованием любой визуальной среды разработки программу нестандартного форматирования дискет. В программе должны присутствовать следующие опции форматирования:
- использование инженерных цилиндров
- использование переменной длины сектора
- использование дополнительных секторов
- использование чередования секторов

Программу решил писать на Cpp. В инэте не удалось найти почти ничего по теме. Нужны статьи, документация и т.п., которые надоумят, как реализовать такую программу в MS Visual Studio. Как абстрактная теория, так и конкретные примеры. Другими словами, подскажите, что почитать по этой теме. Обращаю внимание ещё раз: форматирование доолжно выполняться из-под Windows, а не DOS.
7
29 марта 2009 года
@pixo $oft
3.4K / / 20.09.2006
Для этого достаточно изучить структуру файловой системы FAT.Само форматирование можно выполнять простой записью на дискету с помощью CreateFile(благо она позволяет).Т.е. пишём загрузочный сектор(512 байт) и таблицу размещения файлов(пустую:))
Для реализации вашей задачи требуется только знание файловой системы,ИМХО
14
30 марта 2009 года
Phodopus
3.3K / / 19.06.2008
Цитата: @pixo $oft

Для реализации вашей задачи требуется только знание файловой системы,ИМХО


Ну,

Цитата:

- использование инженерных цилиндров
- использование переменной длины сектора
- использование дополнительных секторов
- использование чередования секторов


отношения к файловой системе не имеет. Это физическая структура диска, не логическая.

Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог