Здравствуйте, гость ( Вход | Регистрация )

21 страниц V  < 1 2 3 4 > »   
Ответить в данную темуНачать новую тему
> Помощь с лабами
Вилен
сообщение 20.10.2004 - 19:10

Это вам не это...
*******
10 лет с форумомОрден имени Чингачгука Большого Змея
Группа: Участник
Сообщений: 2357
Регистрация: 29.09.2003
Пользователь №: 106


Попробуй так:
Код
Application->Initialize();
Application->CreateForm(__classid(TForm1), &Form1);                      
ShowMessage(AnsiString("запускаться?"));
Application->Run();

Есть строки уже есть в файле проекта (не формы!!!), за исключением третей, ее то и надо добавить.

Сообщение отредактировано -=Space=- - 20.10.2004 - 19:14
Перейти в начало страницы
 
+Цитировать сообщение
AAА
сообщение 26.10.2004 - 20:09

силовик
*******
орден I степениорден I степениорден VII степени
Группа: Участник
Сообщений: 6269
Регистрация: 19.07.2004
Пользователь №: 4192


Вот задание лабы туповатое,по-моему,я его не понимаю...
Если кто-нибудь может,сделайте плиз

Дана строка символов,редставляющих собой арифметическое выражение.
Порядок операций определён слева направо.Подсчитайте результат данного выражения.


Сообщение отредактировано алексей - 26.10.2004 - 20:10
Перейти в начало страницы
 
+Цитировать сообщение
Turbo
сообщение 26.10.2004 - 20:48

`°¤,¸,ø¤°`°¤,¸
*****
орден IV степени
Группа: Участник
Сообщений: 971
Регистрация: 28.09.2003
Пользователь №: 30


Код
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <math.h>

void operand(double *sum, double val, char lo)
{
    if (lo == '+')
 *sum += val;
    else if (lo == '-')
 *sum -= val;
    else if (lo == '*')
 *sum *= val;
    else if (lo == '/')
 *sum /= val;
}

int main ()
{
    int i, j, l1;
    double sum;
    char lastoper;
    char tmp[1024];
    char s[1024];


    #ifndef ONLINE_JUDGE
 freopen("input.txt","r",stdin);  
    #endif


    while(gets(tmp)!=NULL)
    {
 if (!strcmp(tmp, ""))
     break;
 l1 = strlen(tmp);
 sum = 0;
 j = 0;
 lastoper = '+';
 for (i = 0; i < l1; i++)
 {
     if ((tmp[i] >= '0' && tmp[i] <= '9') || tmp[i] == '.')
     {
   s[j] = tmp[i];
   j++;
     }
     else if (tmp[i] == '+')
     {
   s[j] = 0;
   j = 0;
   operand(&sum, atof(s), lastoper);
   lastoper = '+';
     }
     else if (tmp[i] == '-')
     {
   s[j] = 0;
   j = 0;
   operand(&sum, atof(s), lastoper);
   lastoper = '-';
     }
     else if (tmp[i] == '*')
     {
   s[j] = 0;
   j = 0;
   operand(&sum, atof(s), lastoper);
   lastoper = '*';
     }
     else if (tmp[i] == '/')
     {
   s[j] = 0;
   j = 0;
   operand(&sum, atof(s), lastoper);
   lastoper = '/';
     }
 }
 s[j] = 0;
 operand(&sum, atof(s), lastoper);
 printf("%.6lf\n", sum);
    }
    return 0;
}


Никаких проверок нет. Операции + - * / приоритет одинаковый то есть выполняются слева направо. Числа могут быть вещественные состоят из цифр и точки, все остальные символы игнорируются. Одно выражение на одной строке, для выхода из программы ввести пустую строку. Удачи.

Тестил на этом: 45+67.8-43.98 * 56/ 62.89
Перейти в начало страницы
 
+Цитировать сообщение
сообщение 26.10.2004 - 21:04
| Быстрая цитата | Сообщение #24



Группа:
Сообщений: 0
Регистрация: --
Пользователь №:


Це зверь парсер зоветься smile.gif

Есть варинты и под BC и под VC. Они они несколько великоваты. Зато рюхают и скобки и ^ и экспоненциальную запись числа и т.д. и т.п. Надо если пиши.
Перейти в начало страницы
 
+Цитировать сообщение
AAА
сообщение 21.11.2004 - 21:32

силовик
*******
орден I степениорден I степениорден VII степени
Группа: Участник
Сообщений: 6269
Регистрация: 19.07.2004
Пользователь №: 4192


Вотъ=)
Дано два текстовых файла.Найти ПЕРЕСЕЧЕНИЕ ФАЙЛОВ,те сформировать новый файл,состоящий из слов,содержащихся в обоих файлах.
Перейти в начало страницы
 
+Цитировать сообщение
Turbo
сообщение 22.11.2004 - 15:31

`°¤,¸,ø¤°`°¤,¸
*****
орден IV степени
Группа: Участник
Сообщений: 971
Регистрация: 28.09.2003
Пользователь №: 30


Код
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

/* Reshenie v lob o(n^2) */

#define MAX_WORD 10000    // Maximalnoe chislo slov v file
#define MAX_LENGTH 1024 // Maximalnaya dlina slova

char file1[MAX_WORD][MAX_LENGTH];
char file2[MAX_WORD][MAX_LENGTH];

int main ()
{
    FILE *in1;
    FILE *in2;
    FILE *out1;
    int l1 = 0;
    int l2 = 0;
    int i, j;

    
    in1 = fopen("in1.txt", "rt");
    in2 = fopen("in2.txt", "rt");
    out1 = fopen("out1.txt", "wt");

    while(fscanf(in1, "%s", file1[l1++])!=EOF)
    ;
    while(fscanf(in2, "%s", file2[l2++])!=EOF)
    ;

    for (i = 0; i < l1; i++)
    {
 for (j = 0; j < l2; j++)
 {
     if (file2[j][0] == 0)
   continue;
     if (!strcmp(file1[i], file2[j]))
     {
   fprintf(out1, "%s\n", file1[i]);
   file2[j][0] = 0;
   break;
     }
 }
    }
    
    fclose(in1);
    fclose(in2);
    fclose(out1);
   
    return 0;
}
Перейти в начало страницы
 
+Цитировать сообщение
AAА
сообщение 23.11.2004 - 21:19

силовик
*******
орден I степениорден I степениорден VII степени
Группа: Участник
Сообщений: 6269
Регистрация: 19.07.2004
Пользователь №: 4192


Цитата([Privacy] @ 22.11.2004 - 16:38)
Turbo, то, что ты написал в предыдущем ответе, ужасно. Просто отвратительно. Даже если бы это работало.

PS: это я к тому, что, всё же, некоторым людям лучше оставаться в пределах формонакидательства и не покидать эти пределы.
*



Цитата(Turbo @ 22.11.2004 - 17:02)
Это работает

1) Я писал это 5 минут, а если бы это потребовало больеш времени, то я бы это писать не стал
2) Сложные комплексные решения он на лабе просто напросто не сдаст.
3) Если тебе не нравится мое напиши лучше, а мы посмотрим =)
*

Да все нормально работает.Это главное.

А вот по каталогам=)
"Отсортировать имена файлов из каталога в алфавитном порядке.Имя кталога задать в строке аргументов.Если имя каталога отсутствует,то выбрать текущий каталог."
Перейти в начало страницы
 
+Цитировать сообщение
МиЦк
сообщение 23.11.2004 - 21:30

сИтИвИк
*******
орден I степениорден I степени10 лет с форумомкубок за победу в конкурсах ФорумаОтличительный знак Горсеть
Группа: Участник
Сообщений: 6558
Регистрация: 22.12.2003
Пользователь №: 1628


Я вижу тут лабы делают, классно и мне тож сделайте, а то уже запарился с ними, вот условие:

Определить класс вектор. В класс включить два конструктора для определения вектора по его размеру и путем копирования другого вектора. При задании вектора по его размеру предусмотреть его заполнение случайными числами.
Определить операции над векторами:
++ расположение элементов в обратном порядке;
-- сортировка элементов вектора по убыванию.
Перейти в начало страницы
 
+Цитировать сообщение
Вилен
сообщение 23.11.2004 - 22:03

Это вам не это...
*******
10 лет с форумомОрден имени Чингачгука Большого Змея
Группа: Участник
Сообщений: 2357
Регистрация: 29.09.2003
Пользователь №: 106


К примеру от Turbo:
А не лучше будет заменить
while(fscanf(in1, "%s", file1[l1++])!=EOF)
;
вот этим:
while (!feof(in)) fgets(file1[l1++],MAX_LENGTH,in1);

scanf может глюкнуть если в файле встретится %
Перейти в начало страницы
 
+Цитировать сообщение
Turbo
сообщение 23.11.2004 - 23:09

`°¤,¸,ø¤°`°¤,¸
*****
орден IV степени
Группа: Участник
Сообщений: 971
Регистрация: 28.09.2003
Пользователь №: 30


Цитата(-=Space=- @ 23.11.2004 - 21:03)
К примеру от Turbo:
А не лучше будет заменить
while(fscanf(in1, "%s", file1[l1++])!=EOF)
;
вот этим:
while (!feof(in))        fgets(file1[l1++],MAX_LENGTH,in1);

scanf может глюкнуть если в файле встретится %
*


Мне не известно должны ли слова быть на новых строчках. А вообще решений тысячи. =) Если критична скорость то надо юзать fread() и алгоритм O(n*log(n))
Перейти в начало страницы
 
+Цитировать сообщение
[Privacy]
сообщение 24.11.2004 - 01:38

Постоялец форума
*****

Группа: Участник
Сообщений: 548
Регистрация: 7.11.2003
Пользователь №: 822


Вот код: (еще 1 вариант)

Код
#include <stdio.h>

// a delimiter string for strtok()
#define    DELIMITER    "\x09\x20\x0D\x0A\x00"
// an amount of memory for reallocation "exception"
#define    EXCEPTION    1000

// a stub for qsort()
int compare(const void *arg1, const void *arg2)
{
  return _stricmp(*(char **)arg1,*(char **)arg2);
}

int    main    (int argc, char **argv, char **envp)    {

    FILE    *src1, *src2, *dst;
    char    **srclist1, **srclist2;
    int    srclen1 = 0, srclen2 = 0;
    int    srclim1 = 0, srclim2 = 0;
    int    flen1, flen2;
    char    *file1, *file2;
    int    i;
    int    rc;
    int    ptr1 = 0, ptr2 = 0;
    int    found = 0;

    if(argc<3)    {
 printf("usage: %s <src1> <src2> [dst]\n",argv[0]);
 return 1;
    }

    src1 = fopen(argv[1],"r");
    src2 = fopen(argv[2],"r");
    if(argv[3])
 dst = fopen(argv[3],"w");
    else
 dst = stdout;

    if(!src1)    {
 printf("can't open %s for reading!\n",argv[1]);
 return 1;
    }

    if(!src2)    {
 printf("can't open %s for reading!\n",argv[1]);
 return 1;
    }

    if(!dst)    {
 printf("can't open %s for writing!\n",argv[1]);
 return 1;
    }

// calculating size of FILE *src1 and feeding char *file1 with all its sources

    fseek(src1,0,SEEK_END);
    flen1 = ftell(src1);
    printf("length of [%s]: [%u] bytes\n",argv[1],flen1);
    rewind(src1);
    file1 = (char *)malloc(flen1);
    memset(file1,0,flen1);
    fread(file1,flen1,1,src1);

// doing same things with FILE *src2

    fseek(src2,0,SEEK_END);
    flen2 = ftell(src2);
    printf("length of [%s]: [%u] bytes\n",argv[2],flen2);
    rewind(src2);
    file2 = (char *)malloc(flen2);
    memset(file2,0,flen2);
    fread(file2,flen2,1,src2);

// setting char **srclist1 with pointers to tokens grepped from char *file1

    srclist1 = (char **)realloc(NULL,EXCEPTION*sizeof(char*));
    srclim1 += EXCEPTION;

    srclist1[srclen1] = strtok(file1,DELIMITER);

    while(srclist1[srclen1])    {
 srclen1++;
 if(!(srclen1 % EXCEPTION))    {
     srclist1 = (char **)realloc(srclist1,(srclim1+EXCEPTION)*sizeof(char*));
     srclim1 += EXCEPTION;
 }
 srclist1[srclen1] = strtok(NULL,DELIMITER);
    }

    printf("number of words in [%s]: [%u]\n",argv[1],srclen1);

// doing same things about **srclist2

    srclist2 = (char **)realloc(NULL,EXCEPTION*sizeof(char*));
    srclim2 += EXCEPTION;

    srclist2[srclen2] = strtok(file2,DELIMITER);

    while(srclist2[srclen2])    {
 srclen2++;
 if(!(srclen2 % EXCEPTION))    {
     srclist2 = (char **)realloc(srclist2,(srclim2+EXCEPTION)*sizeof(char*));
     srclim2 += EXCEPTION;
 }
 srclist2[srclen2] = strtok(NULL,DELIMITER);
    }

    printf("number of words in [%s]: [%u]\n",argv[2],srclen2);

// qsort()ing contents within **srclist1

    printf("qsorting words in [%s]...",argv[1]);
    qsort((void*)srclist1,(size_t)srclen1,sizeof(char*),compare);
    printf("done\n");

// ...and within **srclist2

    printf("qsorting words in [%s]...",argv[2]);
    qsort((void*)srclist2,(size_t)srclen2,sizeof(char*),compare);
    printf("done\n");

// looking for unique words both in **srclist1 and **srclist2

    printf("calculating conterminous words...");
    while((ptr1 != srclen1) && (ptr2 != srclen2))    {
 rc = _stricmp(srclist1[ptr1],srclist2[ptr2]);
 if(rc < 0)
     ptr1++;
 if(rc > 0)
     ptr2++;
 if(!rc)    {
     fprintf(dst,"%s\n",srclist1[ptr1]);
     ptr1++;
     ptr2++;
 }
    }
    printf("done");

    fclose(src1);
    fclose(src2);
    fclose(dst);

    return 0;

}


Сообщение отредактировано Phoenix - 25.11.2004 - 20:22
Перейти в начало страницы
 
+Цитировать сообщение
AAА
сообщение 24.11.2004 - 10:00

силовик
*******
орден I степениорден I степениорден VII степени
Группа: Участник
Сообщений: 6269
Регистрация: 19.07.2004
Пользователь №: 4192


алексей добавил(а) в нет данных
"Отсортировать имена файлов из каталога в алфавитном порядке.Имя кталога задать в строке аргументов.Если имя каталога отсутствует,то выбрать текущий каталог."

Сообщение отредактировано алексей - 24.11.2004 - 10:00
Перейти в начало страницы
 
+Цитировать сообщение
Turbo
сообщение 24.11.2004 - 14:52

`°¤,¸,ø¤°`°¤,¸
*****
орден IV степени
Группа: Участник
Сообщений: 971
Регистрация: 28.09.2003
Пользователь №: 30


И вообще это один большой оффтоп который должен почистить модер.
Почищено. Phoenix
2 алексей:
работа с директориями зависит от того под какую платформу это пишется. Мне бы проще всего это было написать это на Visual Studio под MFC. Я не знаю на чем тебе это нужно.
Перейти в начало страницы
 
+Цитировать сообщение
Guest_AVAL_*
сообщение 24.11.2004 - 15:01
| Быстрая цитата | Сообщение #34


Гости





не совсем в тему, но все таки

вот такую процедурку я написал месяц назад, хотелось бы услышать оценку - пускай даже такую что все это "ужасно" wink.gif, только с обьяснением почему

Цитата
typedef struct {
char *data;
int size;
int len;
} buf_t;

void IncSize_sprintf(buf_t *buf, const char *srcFmt, ...)
{
char *tmpBuf = NULL;
int cpLen = 0;
va_list ap;
int tmpBufLen = 0;
int incSize = 0;
int oldLen;

va_start (ap, srcFmt);

do {
  tmpBufLen += TMP_BUF_INIT_SIZE;
  tmpBuf = (char *)Realloc((void *)tmpBuf, sizeof(char) * tmpBufLen);
  cpLen = vsnprintf(tmpBuf, tmpBufLen, srcFmt, ap);
} while (cpLen >= tmpBufLen);

va_end(ap);

oldLen = buf->len;
buf->len += cpLen;

while (buf->len >= buf->size) {
  buf->size += (DATA_BUF_INC_SIZE);
  incSize = 1;
}

if (incSize)
  buf->data = (char *)Realloc((void *)(buf->data), sizeof(char) * buf->size);
 
memcpy((void *)(buf->data + oldLen), tmpBuf, cpLen);

free(tmpBuf);
}
Перейти в начало страницы
 
+Цитировать сообщение
SHADE
сообщение 24.11.2004 - 15:56

Bill rulz ^^
******
орден IV степени
Группа: Участник
Сообщений: 1418
Регистрация: 28.09.2003
Пользователь №: 24


вот тут увидел вдруг вопрос, он хоть и старый, но вам хотел показать

Цитата(алексей @ 26.10.2004 - 20:09)
Вот задание лабы туповатое,по-моему,я его не понимаю...
Если кто-нибудь может,сделайте плиз

Дана строка символов,редставляющих собой арифметическое выражение.
Порядок операций определён слева направо.Подсчитайте результат данного выражения.

*


Представляю аналог на VB laugh.gif
Код
' пробиваем переменные
Dim objScript As Object
Dim strExpression As String
Dim sngA As Single
Dim sngResult As Single

' создаем обьект, который нам все посчитает
Set objScript = CreateObject("MSScriptControl.ScriptControl")
objScript.Language = "VBScript"

' то что надо посчитать
strExpression = "67 + (54 + 68 / 23) *  ( A - 7) / Sqr(16) "
sngA = 10

' выполняем код
objScript.ExecuteStatement "A = " + CStr(sngA)
objScript.ExecuteStatement "sngResult = " + CStr(strExpression)

' получаем результат
sngResult = objScript.eval("sngResult")
MsgBox "strExpression = " + CStr(sngResult), , "Результат"
Перейти в начало страницы
 
+Цитировать сообщение
Yuran
сообщение 24.11.2004 - 16:09

Постоялец форума
*****
орден III степени
Группа: Участник
Сообщений: 726
Регистрация: 26.09.2003
Пользователь №: 15


Мануальный Васик тут не причем.
Подрубить какой-нить жестокий парсер можно в любом языке, а задание человеку было дано для того, чтобы он научился выражения разбирать.
Так с понтом можно сказать, что я веб браузер крутой написал, накинув в дельфи компонент, который в итоге Осла заюзает. laugh.gif
Перейти в начало страницы
 
+Цитировать сообщение
AAА
сообщение 24.11.2004 - 16:16

силовик
*******
орден I степениорден I степениорден VII степени
Группа: Участник
Сообщений: 6269
Регистрация: 19.07.2004
Пользователь №: 4192


Убейте меня,если я хоть что-то в этом понимаю! yes.gif respect.gif
Перейти в начало страницы
 
+Цитировать сообщение
SHADE
сообщение 24.11.2004 - 16:37

Bill rulz ^^
******
орден IV степени
Группа: Участник
Сообщений: 1418
Регистрация: 28.09.2003
Пользователь №: 24


Половина лаб в миете делается копипсатом примеров кода из хелпа. И никто никогда на них ничему не научится. Их просто нужно сдать и все, при этом не усложняя себе жизнь. Основное условие этого - выполнить задание, чаще всего не имеет никакого значения как это будет реализованно.

Как пример из жизни - у нас щас идут лабы "по с++" или просто С, (?) я еще не понял laugh.gif . Я одну из лаб написал на басике, на перемене за 15 минут, остальные с ней занимались любовь на с++ (или С) больше чем 1,5 лабы.
Перейти в начало страницы
 
+Цитировать сообщение
Guest_AVAL_*
сообщение 24.11.2004 - 20:17
| Быстрая цитата | Сообщение #39


Гости





to Privacy: Конечно правильно wink.gif

Хотя я буду рад коментариям от любого.

Извиняюсь еще раз что втиснулся в чужую тему, но в ней просто Приваси поднял то что как мне кажется меня интересует.

А теперь коментариии к тому что я там вывалил.
Эта процедура автоматически расширяет буфер buf для поступающих в него форматированных данных если не хватает размера.
Буфер естественно расширяется гораздо реже, чем происходит запись данных для этого константа DATA_BUF_INC_SIZE раз в 10-100 больше среднестатического размера поступаемых данных. Это сделано что бы сократить кол-во системных вызовов realloc.

tmpBuf используется как вспомогательный для выполнения обычного snprintf. Размер этого буфера выбран заведомо больше чем поступающие форматированные данные в реале. поэтому для tmpBuf realloc() в реальной програме запускаться не будет, однако не хотелось привязывать програму к конкртеным числам и если теоретически с какого то фига в tempBuf данные не влезут он расширится и формирование строки повторится снова. Мне показалось это наиболее разумным

А вопрос может быть только один - как бы это сделали вы програмисты со стажем знаниями и опытом. НУ или на сколько то что я написал криво? wink.gif
Перейти в начало страницы
 
+Цитировать сообщение
Phoenix
сообщение 24.11.2004 - 20:23

void*
******
орден IV степени
Группа: Участник
Сообщений: 1631
Регистрация: 29.09.2003
Пользователь №: 45


Господа, закончили оффтоп, Приваси, что ты крут известно всем и так. И если кто-то в вопросе разбирается хуже тебя, то это не делает из него ламера. Поэтому: на личности не переходим, и почистите, пожалуйста, свои мессаги от личностей и препирательств.
Перейти в начало страницы
 
+Цитировать сообщение

21 страниц V  < 1 2 3 4 > » 
Ответить в данную темуНачать новую тему
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 



RSS Текстовая версия Сейчас: 26.04.2024 - 11:28