Помощь с лабами |
Здравствуйте, гость ( Вход | Регистрация )
Помощь с лабами |
20.10.2004 - 19:10
Вставить ник | Быстрая цитата | Сообщение
#21
|
|
Это вам не это... Группа: Участник Сообщений: 2357 Регистрация: 29.09.2003 Пользователь №: 106 |
Попробуй так:
Код Application->Initialize(); Application->CreateForm(__classid(TForm1), &Form1); ShowMessage(AnsiString("запускаться?")); Application->Run(); Есть строки уже есть в файле проекта (не формы!!!), за исключением третей, ее то и надо добавить. Сообщение отредактировано -=Space=- - 20.10.2004 - 19:14 |
|
|
26.10.2004 - 20:09
Вставить ник | Быстрая цитата | Сообщение
#22
|
|
силовик Группа: Участник Сообщений: 6269 Регистрация: 19.07.2004 Пользователь №: 4192 |
Вот задание лабы туповатое,по-моему,я его не понимаю...
Если кто-нибудь может,сделайте плиз Дана строка символов,редставляющих собой арифметическое выражение. Порядок операций определён слева направо.Подсчитайте результат данного выражения. Сообщение отредактировано алексей - 26.10.2004 - 20:10 |
|
|
26.10.2004 - 20:48
Вставить ник | Быстрая цитата | Сообщение
#23
|
|
`°¤,¸,ø¤°`°¤,¸ Группа: Участник Сообщений: 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 Регистрация: -- Пользователь №: |
Це зверь парсер зоветься
Есть варинты и под BC и под VC. Они они несколько великоваты. Зато рюхают и скобки и ^ и экспоненциальную запись числа и т.д. и т.п. Надо если пиши. |
|
|
21.11.2004 - 21:32
Вставить ник | Быстрая цитата | Сообщение
#25
|
|
силовик Группа: Участник Сообщений: 6269 Регистрация: 19.07.2004 Пользователь №: 4192 |
Вотъ=)
Дано два текстовых файла.Найти ПЕРЕСЕЧЕНИЕ ФАЙЛОВ,те сформировать новый файл,состоящий из слов,содержащихся в обоих файлах. |
|
|
22.11.2004 - 15:31
Вставить ник | Быстрая цитата | Сообщение
#26
|
|
`°¤,¸,ø¤°`°¤,¸ Группа: Участник Сообщений: 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; } |
|
|
23.11.2004 - 21:19
Вставить ник | Быстрая цитата | Сообщение
#27
|
|
силовик Группа: Участник Сообщений: 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
Вставить ник | Быстрая цитата | Сообщение
#28
|
|
сИтИвИк Группа: Участник Сообщений: 6558 Регистрация: 22.12.2003 Пользователь №: 1628 |
Я вижу тут лабы делают, классно и мне тож сделайте, а то уже запарился с ними, вот условие:
Определить класс вектор. В класс включить два конструктора для определения вектора по его размеру и путем копирования другого вектора. При задании вектора по его размеру предусмотреть его заполнение случайными числами. Определить операции над векторами: ++ расположение элементов в обратном порядке; -- сортировка элементов вектора по убыванию. |
|
|
23.11.2004 - 22:03
Вставить ник | Быстрая цитата | Сообщение
#29
|
|
Это вам не это... Группа: Участник Сообщений: 2357 Регистрация: 29.09.2003 Пользователь №: 106 |
К примеру от Turbo:
А не лучше будет заменить while(fscanf(in1, "%s", file1[l1++])!=EOF) ; вот этим: while (!feof(in)) fgets(file1[l1++],MAX_LENGTH,in1); scanf может глюкнуть если в файле встретится % |
|
|
23.11.2004 - 23:09
Вставить ник | Быстрая цитата | Сообщение
#30
|
|
`°¤,¸,ø¤°`°¤,¸ Группа: Участник Сообщений: 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)) |
|
|
24.11.2004 - 01:38
Вставить ник | Быстрая цитата | Сообщение
#31
|
|
Постоялец форума Группа: Участник Сообщений: 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 |
|
|
24.11.2004 - 10:00
Вставить ник | Быстрая цитата | Сообщение
#32
|
|
силовик Группа: Участник Сообщений: 6269 Регистрация: 19.07.2004 Пользователь №: 4192 |
алексей добавил(а) в нет данных
"Отсортировать имена файлов из каталога в алфавитном порядке.Имя кталога задать в строке аргументов.Если имя каталога отсутствует,то выбрать текущий каталог." Сообщение отредактировано алексей - 24.11.2004 - 10:00 |
|
|
24.11.2004 - 14:52
Вставить ник | Быстрая цитата | Сообщение
#33
|
|
`°¤,¸,ø¤°`°¤,¸ Группа: Участник Сообщений: 971 Регистрация: 28.09.2003 Пользователь №: 30 |
И вообще это один большой оффтоп который должен почистить модер.
Почищено. Phoenix 2 алексей: работа с директориями зависит от того под какую платформу это пишется. Мне бы проще всего это было написать это на Visual Studio под MFC. Я не знаю на чем тебе это нужно. |
|
|
Guest_AVAL_* |
24.11.2004 - 15:01
| Быстрая цитата | Сообщение
#34
|
Гости |
не совсем в тему, но все таки
вот такую процедурку я написал месяц назад, хотелось бы услышать оценку - пускай даже такую что все это "ужасно" , только с обьяснением почему Цитата 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); } |
|
|
24.11.2004 - 15:56
Вставить ник | Быстрая цитата | Сообщение
#35
|
|
Bill rulz ^^ Группа: Участник Сообщений: 1418 Регистрация: 28.09.2003 Пользователь №: 24 |
вот тут увидел вдруг вопрос, он хоть и старый, но вам хотел показать
Цитата(алексей @ 26.10.2004 - 20:09) Вот задание лабы туповатое,по-моему,я его не понимаю... Если кто-нибудь может,сделайте плиз Дана строка символов,редставляющих собой арифметическое выражение. Порядок операций определён слева направо.Подсчитайте результат данного выражения. Представляю аналог на VB Код ' пробиваем переменные
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), , "Результат" |
|
|
24.11.2004 - 16:09
Вставить ник | Быстрая цитата | Сообщение
#36
|
|
Постоялец форума Группа: Участник Сообщений: 726 Регистрация: 26.09.2003 Пользователь №: 15 |
Мануальный Васик тут не причем.
Подрубить какой-нить жестокий парсер можно в любом языке, а задание человеку было дано для того, чтобы он научился выражения разбирать. Так с понтом можно сказать, что я веб браузер крутой написал, накинув в дельфи компонент, который в итоге Осла заюзает. |
|
|
24.11.2004 - 16:16
Вставить ник | Быстрая цитата | Сообщение
#37
|
|
силовик Группа: Участник Сообщений: 6269 Регистрация: 19.07.2004 Пользователь №: 4192 |
Убейте меня,если я хоть что-то в этом понимаю!
|
|
|
24.11.2004 - 16:37
Вставить ник | Быстрая цитата | Сообщение
#38
|
|
Bill rulz ^^ Группа: Участник Сообщений: 1418 Регистрация: 28.09.2003 Пользователь №: 24 |
Половина лаб в миете делается копипсатом примеров кода из хелпа. И никто никогда на них ничему не научится. Их просто нужно сдать и все, при этом не усложняя себе жизнь. Основное условие этого - выполнить задание, чаще всего не имеет никакого значения как это будет реализованно.
Как пример из жизни - у нас щас идут лабы "по с++" или просто С, (?) я еще не понял . Я одну из лаб написал на басике, на перемене за 15 минут, остальные с ней занимались любовь на с++ (или С) больше чем 1,5 лабы. |
|
|
Guest_AVAL_* |
24.11.2004 - 20:17
| Быстрая цитата | Сообщение
#39
|
Гости |
to Privacy: Конечно правильно
Хотя я буду рад коментариям от любого. Извиняюсь еще раз что втиснулся в чужую тему, но в ней просто Приваси поднял то что как мне кажется меня интересует. А теперь коментариии к тому что я там вывалил. Эта процедура автоматически расширяет буфер buf для поступающих в него форматированных данных если не хватает размера. Буфер естественно расширяется гораздо реже, чем происходит запись данных для этого константа DATA_BUF_INC_SIZE раз в 10-100 больше среднестатического размера поступаемых данных. Это сделано что бы сократить кол-во системных вызовов realloc. tmpBuf используется как вспомогательный для выполнения обычного snprintf. Размер этого буфера выбран заведомо больше чем поступающие форматированные данные в реале. поэтому для tmpBuf realloc() в реальной програме запускаться не будет, однако не хотелось привязывать програму к конкртеным числам и если теоретически с какого то фига в tempBuf данные не влезут он расширится и формирование строки повторится снова. Мне показалось это наиболее разумным А вопрос может быть только один - как бы это сделали вы програмисты со стажем знаниями и опытом. НУ или на сколько то что я написал криво? |
|
|
24.11.2004 - 20:23
Вставить ник | Быстрая цитата | Сообщение
#40
|
|
void* Группа: Участник Сообщений: 1631 Регистрация: 29.09.2003 Пользователь №: 45 |
Господа, закончили оффтоп, Приваси, что ты крут известно всем и так. И если кто-то в вопросе разбирается хуже тебя, то это не делает из него ламера. Поэтому: на личности не переходим, и почистите, пожалуйста, свои мессаги от личностей и препирательств.
|
|
|
Текстовая версия | Сейчас: 2.01.2025 - 20:13 |