Ru-Board.club
← Вернуться в раздел «Прикладное программирование»

» Вопросы по программированию на C/С++

Автор: mastaflow
Дата сообщения: 09.12.2008 22:47
Есть несколько вопросов по С++/MFC:
создаю такую штуку CList<int**> list;
1) правильно ли я ее создаю? (т.е. нужен список двухмерных динамических массивов с возможностью сериализации)
2) как правильно удалять объект из списка (в данном контексте с указателями)?
3) достаточно ли при сериализации написать?

Код: list.Serialize(ar);
Автор: Sargonius
Дата сообщения: 12.12.2008 01:51
Долго искал в гугле, а в итоге обнаружил эту чудесную тему.
Собственно есть очень простой вопрос, на который уже долгое время не получается найти такой же простой ответ.
Есть несколько числовых переменных (a, b, c для примера). По одному действию программы нужно записать их в обычный текстовый файл. По второму действию - присвоить этим переменным значения, записанные в файле(a = a из файла, b = b из файла etc). Может кто-нибудь на работающем простом примере показать как это сделать? Заранее огромное спасибо.
Автор: TargeTSan
Дата сообщения: 12.12.2008 11:41
mastaflow
Если тебе надо список двухмерных динамических массивов с _полной_ сериализацией, то это будет

Код:
typedef CList<CArray<CArray<int> > > ListOfBidimIntArrays;
Автор: Infinite Retrieval
Дата сообщения: 14.12.2008 19:09

Код:
#include <stdio.h>
#include <math.h>

int main()
{
    int bb;
    double ss;
    scanf("%i", &bb);
    ss=sqrt( 1/((bb*bb-bb)));
    printf("%f", ss);
    getch();
}

Автор: mastaflow
Дата сообщения: 14.12.2008 19:37
TargeTSan
Спасибо, я уже сделал с вектором, че-то меня переклинило на int**
Автор: Abs62
Дата сообщения: 14.12.2008 19:41
Infinite Retrieval
ss=sqrt( 1.0/((bb*bb-bb)));
Автор: akaGM
Дата сообщения: 14.12.2008 19:45
Infinite Retrieval

ss=sqrt( 1.0/(((double)bb*(double)bb-(double)bb)));


---
Abs62
гы-гы
Автор: Infinite Retrieval
Дата сообщения: 14.12.2008 20:03
Abs62
Ё-маё.... а я ведь что-то подобное знал..... только я думал что тип преобразуется по самому широкому из учасвующих в операции, ан нет.

Спасибо, вы часто мне помогаете) Прямо так и думал, что вы мне ответите)
Раз так, вы не знаете где продаётся книга "Алгебра" авторов Глухов, Елизаров, Нечаев, ато по дискретной математике дела не очень( Всё обыскал, нет её в Москве. Ни скачать ни купить.
Автор: Abs62
Дата сообщения: 14.12.2008 20:23
Infinite Retrieval

Цитата:
Раз так, вы не знаете где продаётся книга "Алгебра" авторов Глухов, Елизаров, Нечаев

Yandex - найдётся всё.
akaGM
Возможные грабли со знаменателем я оставлял для самостоятельного наступания.
Автор: akaGM
Дата сообщения: 14.12.2008 20:33
Abs62
да, я прям сналёта ввёл единичку...
а вообще-то я смеялся над временем постинга...

Автор: Infinite Retrieval
Дата сообщения: 14.12.2008 21:19
Я тут пишу одну прогу, облегчающую расчёт погрешности методом Стьюдента, вот её часть:


Код:
void main
{
double data[25];
double overall;
for (j=0; j<25; j++) { scanf("%f", &data[j]); if (data[j]==0) break;}
printf("\n");
printf ("You have entered: ");
    
for(k=0, overall=0; k<j; k++)
    {
        if (data[k]==0) break;
        printf("%f ", data[k]);
        overall+=data[k];
    }

    getch();
    
}
Автор: Abs62
Дата сообщения: 14.12.2008 21:44
Infinite Retrieval
scanf("%lf", &data[j]);
%f - для ввода float, %lf - для double, %Lf - для long double.
Автор: Infinite Retrieval
Дата сообщения: 14.12.2008 21:47
Abs62
Спасибо.... сколько времени на это убил... главное в msdn этого вроде нет.
Автор: Abs62
Дата сообщения: 14.12.2008 22:00
Infinite Retrieval
Есть, если поискать.
scanf Width Specification.
Автор: Infinite Retrieval
Дата сообщения: 16.12.2008 00:02

Код:
#include <stdio.h>

void main()
{
    FILE *file_in, *file_out;
    char filename_in[FILENAME_MAX], that_in[FILENAME_MAX];
    unsigned char buf[16], key[16], n, i;
    unsigned int mykey;

    printf("Enter the file to descrypt");
    scanf("%s", filename_in);
    printf("Enter your own key, for generation of other keys");
    scanf("%u", &mykey);
        
    file_in=fopen(filename_in, "rb+");
    for(i=0;i<16;++i)key[i]=atoi(mykey)^0xAA^i; //сгенерировали ключи

     fread(&n,sizeof(n),1,file_in);
     fread(that_in,1,n,file_in);
     for(i=0;i<n;i++) that_in[i]^=i^0xAA^atoi(mykey);

     file_out=fopen(that_in, "wb+");



do
{
     n=fread(buf,1,16,file_in);
     for(i=0;i<n;i++) buf[i]^=key[i];
     fwrite(buf,1,n,file_out);
} while(!feof(file_in));

fclose(file_in);
fclose(file_out);
}
Автор: Skyer1
Дата сообщения: 18.12.2008 16:48
Может не туда пишу, но суть проблеммы в следующем есть программа на Линуксе написанная на С

#include<stdio.h>
#include<stdlib.h>
#include<unistd.h>
#include<sys/types.h>
#include"iostream"
#include"fstream"
using namespace std;
int main(int argc,char *argv[],char *envp[])
{
if(argc>1){
if(!(strcmp(argv[1],"help"))){
if(argc==2){
(void) execle("/home/help","/home/help",argv[1],0,envp);
}
else
if(argc==3){
(void) execle("/home/help","/home/help",argv[1],argv[2],0,envp);
}
else (void) execle("/home/help","/home/help","help","-2",0,envp);
}
else{
if(argc==2){
FILE *f;
f=fopen(argv[1],"r");
if(f==NULL){
(void) execle("/home/help","/home/help","help","-1",0,envp);
}
else{
fclose(f);
int pid=fork();
if(pid==-1){
(void) execle("/home/help","/home/help","help","-4",0,envp);
}
else
if(pid==0(void)execle("/bin/ls","/bin/ls",argv[1],argv[2],0,envp);
}
}
else
(void) execle("/home/help","/home/help","help","-2",0,envp);
}
}
else (void) execle("/home/help","/home/help","help","-2",0,envp);
return 0;
}


Дальше идет описание программы, так вот мне нужно поподробнее описание, а точнее, что делают и куда возвращают значения fork и execle я с линуксом не работал, поэтому не могу понять.


После запуска программы на исполнение ОС загружает список команд в память, после чего процессор начинает последовательно выполнять этот список.
В начале проверяем количество параметров, если параметров <1 то выдаем ошибку, иначе проверяем второй параметр. Если второй параметр является help, то вызывается help и завершаем работу программы, иначе с помочью fopen проверяется наличие файла указанного как параметр, если файл не существует выдаем ошибку и завершаем работу программы, иначе закрываем файл, создаем новый процесс c помочью системного вызова fork
Автор: Asm64D
Дата сообщения: 21.12.2008 02:25
Skyer1
http://ru.wikipedia.org/wiki/Fork
а ниже можно найти инфу про execle
http://linux.about.com/library/cmd/blcmdl3_execle.htm
Автор: Plotinus
Дата сообщения: 26.12.2008 13:07
люди добрые, дайте пжлста ссылочку на какой-нить учебник по С++ с нуля??
Автор: Alex lenin
Дата сообщения: 26.12.2008 15:07
Помогите пожалуйста у меня защита курсовой завтра по С++ а задача не сделана совсем!!! А в С++ я совсем не шарю!!! помогите пожалуйста!!! Заранее Спасибо!!!

Какое максимальное колличество натуральных чисел от 1 до 10 можно выбрать чтобы среди них не было отличающихся в два раза!!!
Автор: AZA_N
Дата сообщения: 26.12.2008 15:50
Plotinus, для себя я выбрала для изучения "с нуля" книги Стивен Прата "Язык программирования С++" и Шилдт Г. "Самоучитель С++". Тема по книгам по С++ - Ссылка. Сами книги есть на gen.lib.rus.ec. Т.к. я сама изучать начала недавно, то было бы интересно мнение более опытных программистов.
Автор: INT07
Дата сообщения: 26.12.2008 15:57
Помогите найти программу по теме: Разработка многотерминальной системы на основе ОС Linux. ЧТО УГОДНО! пожалуйста!
Автор: distance
Дата сообщения: 26.12.2008 19:40
INT07
VNC
Автор: Infinite Retrieval
Дата сообщения: 27.12.2008 00:08
Есть ли способ выделить память под указатель на char, ровно столько, сколько нужно (т.е. определить сколько ввёл пользователь в консоли символов, выделить память и записать в неё то, что ввёл пользователь). Я знаком лишь с другим методом: выделяю много памяти, считываю в неё, а потом (чтобы память не засирать) применяю realloc(string, strlen(string)), т.е. перевыделяю память, новая память не будет содержать пустого хвоста. Но все эти перевыделения - это действия, программа копирует строку в новое место, и стирает старое. Этот метод не выгоден по ресурсам. (это конечно смешые объёмы, но всё-же, хочется правильно писать проги).

Я тут попробывал вот что написать

Код:
void main()
{
    char *string;
    int i=0;
    while (getchar()!='\n') i++;
    string=malloc((i+1)*sizeof(char));
    fseek(stdin,0,SEEK_SET);
    fscanf(stdin, "%s", string);
    printf("%s", string);
    
    getch();
}
Автор: Infinite Retrieval
Дата сообщения: 27.12.2008 13:37
всё, что я ввёл с клавиатуры записывается в буфер. Нельзя ли после нажатия enter прочесть буфер, и зная количесво символов выделить память и записать символы в эту память? Scanf и getchar выталкивают буфер, а есть ли функция, которая просто открывает консоль и пишет в буфер?
Автор: akaGM
Дата сообщения: 27.12.2008 14:13
Infinite Retrieval
консоль, aka stdin, -- всегда "открыта", и она и пишет в буфер... который ты задаёшь...
а доступ ко внутренним буферам, боюсь, для тебя закрыт, если ты только не полезешь менять rtl...

Код: #define TMP_SIZE 2048
char *tmpbuff = NULL;
char *str = NULL;
int numchars = 0;

void main() {
tmpbuff = (char *)malloc(TMP_SIZE*sizeof(char));
gets(tmpbuff);
numchars = strlen(tmpbuff) + 1;
str = (char *)malloc((numchars)*sizeof(char));
strcpy(str, tmpbuff);

printf("%d\n", numchars);
puts(tmpbuff);
puts(str);

free(tmpbuff);
free(str);
}
Автор: Infinite Retrieval
Дата сообщения: 27.12.2008 21:48
Нет, это не то, тут всё ещё хуже, с точки зрения памяти и действий. Понимаете, если вы видите символы на экране, значит они содержатся в соответствующем файле, буфер уже выделен в stdio.h, вот только как добраться до него? Как после нажатия enter узнать количесво символов в буфере ввода, а затем выделить это кол-во памяти?
Автор: akaGM
Дата сообщения: 27.12.2008 21:57
Infinite Retrieval

Цитата:
тут всё ещё хуже, с точки зрения памяти и действий

спорное утверждение, ты больше 2kb с клавиатуры обычно вводишь?
но как будет угодно...

да и зачем тебе это?

Цитата:
если вы видите символы на экране, значит они содержатся в соответствующем файле, буфер уже выделен в stdio.h

читай видеопамять напрямую..
ни в каких файлах они не содержатся и ничего в stdio.h не выделено...
они размещаются только во _внутренних_ буферах системы i/o и тебе остаётся только
Цитата:
менять rtl...
если ты знаешь чтО это такое...
Автор: TeXpert
Дата сообщения: 28.12.2008 00:29
akaGM
Цитата:
они размещаются только во _внутренних_ буферах системы i/o и тебе остаётся только
Цитата:менять rtl...
Ну зачем так грустно?)
Infinite Retrieval Есть "проще" выход: взять Windows DDK, там есть примеры драйверов -- kbdclass (драйвер класса), и ещё кое-что клавное. Бери коды, правь и строчи что тебе надо, с уровня драйверов ты можешь всё. Примеров других тоже куча
Автор: Abs62
Дата сообщения: 28.12.2008 01:06
TeXpert
Это называется "из пушки по воробьям".
Автор: TeXpert
Дата сообщения: 28.12.2008 01:12
Abs62
Так я ставлю кавычки! Да и на запросы заказчика посмотри, однако. Определённо это простой способ, только надо будет ему ещё организовывать вазимодействие с User-режимом)

Страницы: 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193

Предыдущая тема: не знаю как назвать тему :-)


Форум Ru-Board.club — поднят 15-09-2016 числа. Цель - сохранить наследие старого Ru-Board, истории становления российского интернета. Сделано для людей.