30.04.2009, 19:42 | #11 (permalink) |
Специалист
Регистрация: 06.03.2007
Сообщений: 2,743
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 608
|
|
30.04.2009, 19:42 | |
Helpmaster
Member
Регистрация: 08.03.2016
Сообщений: 0
|
Давайте обратим внимание на схожие темы Помогите с Паскалем SharpDevelop помогите дописать задачу. Завтра экзамен. Программка на Pascal'e ABC. Помогите пожалуйста, завтра сдавать. |
01.05.2009, 00:37 | #15 (permalink) |
Member
Регистрация: 03.03.2009
Сообщений: 87
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 187
|
Вот код, комба из двух элементарнейших алгоритмов -
запись в динамический массив (один из вариантов) сортировка массива (на википедии по "Сортировка выбором" выводит пример алгоритма для целых чисел, адаптируется путем замены "<" на "strcmp") Собственно код: Код:
#include <stdio.h> #include <stdlib.h> #include <string.h> char **Array; int Count = 0; // Функция добавления элемента в массив void addElement(char *str) { // Увеличиваем счетчик размера массива Count++; // Создаем или увеличиваем массив строк if (Array == NULL) Array = malloc(sizeof(char *)); else Array = realloc(Array, sizeof(char *) * Count); // Добавляем элемент в массив строк Array[Count - 1] = calloc(strlen(str) + 1, sizeof(char)); // Записываем строку в массив strcpy(Array[Count - 1], str); } // Функция, меняющая две строки местами void swapElements(int a, int b) { char *tmp = Array[a]; Array[a] = Array[b]; Array[b] = tmp; } // Функция сортировки void sortElements() { int i, min, j; for (i = 0; i < Count - 1; i++) { /* выбираем начальное значение мин. индекса */ min = i; /* поиск минимального индекса элемента */ for (j = i + 1; j < Count; j++) if (strcmp(Array[j], Array[min]) < 0) min = j; /* замена значений местами */ swapElements(i, min); } } // Запрос ввода и ввод из stdin следующей строки int enterElement() { char buffer[71]; printf( "Enter new string, null-length string for sort and stop:\n" ); gets(buffer); if (strlen(buffer) == 0) return 0; addElement(buffer); return 1; } // Вывод содержимого массива на stdout void printElements() { int i; for(i = 0; i < Count; i++) printf( " String %02d: %s\n", i, Array[i] ); } // Главная функция int main() { // Вводим набор строк while (enterElement()); // Выводим массив до сортировки printf( "Before sort:\n" ); printElements(); // Сортируем sortElements(); // Выводим массив после сортировки printf( "After sort:\n" ); printElements(); return 0; } 1. ну тут отнюдь не все хакеры) даже совсем-отнюдь-не все)))) 2. информация даром и для всех - это хорошо, а вот "сделайте плиз прогу" это уже не для всех и не всегда, попадаются правда фрики вроде меня)) P.P.S. надеюсь код пригодится А вот это ты зря, т.к. я подумал (да и многие другие я думаю), что раз ты за $$ делаешь, то и твоя тема про задачу с Crc32 уже не актуальна... Соответственно помощи ты по большей части из-за этого и не дождался)) (ИМХО) Действительно забавно))) Последний раз редактировалось csbwalker; 01.05.2009 в 00:43 |
Ads | |
Member
Регистрация: 31.10.2006
Сообщений: 40200
Записей в дневнике: 0
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 55070
|
25.05.2009, 21:27 | #17 (permalink) |
Новичок
Регистрация: 28.04.2009
Сообщений: 11
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
|
а если немного изменить условия:
Строки текста, считанных с stdin, сохранить в двусвязный список, массив. Результат на stdout, реверсировать на выводе. заранее благодарен. |
26.05.2009, 12:29 | #18 (permalink) | |
Member
Регистрация: 03.03.2009
Сообщений: 87
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 187
|
Цитата:
Вот код: Код:
#include <stdio.h> #include <stdlib.h> #include <string.h> struct listNode { char *str; struct listNode *before; struct listNode *after; }; void listInit(struct listNode *node) { node->str = NULL; node->before = NULL; node->after = NULL; } int listPush(struct listNode *node, char *str) { /* Переходим к последнему элементу */ while(node->after != NULL) node = node->after; /* Если в элементе не записана строка - то записываем в него, иначе - создаём новый элемент */ if(node->str != NULL) { /* Выделяем память под новый элемент, записываем указатель на него */ node->after = malloc(sizeof(struct listNode)); if(node->after == NULL) return 0; /* Инициализируем новый элемент */ listInit(node->after); /* Записываем в новый элемент указатель на тот, который ранее был последним */ node->after->before = node; /* Переключаем node на новый элемент */ node = node->after; } /* Выделяем в элементе память под строку */ node->str = malloc(sizeof(char)*(strlen(str) + 1)); if(node->str == NULL) return 0; /* Записываем строку в элемент */ strcpy(node->str, str); return 1; } void listReversePrint(struct listNode *node) { /* Переходим к последнему элементу */ while(node->after != NULL) node = node->after; /* Выводим все элементы в обратном порядке */ while(node != NULL) { if(node->str != NULL) printf("STRING: <%s>\n", node->str); node = node->before; } } int main() { struct listNode *first; char str[81]; /* Создаём корневой элемент списка */ first = malloc(sizeof(struct listNode)); if(first == NULL) { printf("Error!\n"); return 1; } listInit(first); /* Цикл запроса строк */ do { printf("Enter string, or '*' to exit: "); scanf("%s", str); if((strlen(str) == 1) && (str[0] == '*')) break; } while(listPush(first, str)); /* Выводим результат - список в обратном порядке */ printf("Nodes (reverse):\n"); listReversePrint(first); return 0; } |
|
26.05.2009, 14:25 | #19 (permalink) |
Новичок
Регистрация: 28.04.2009
Сообщений: 11
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
|
Спасибо, csbwalker, на счет постов больше так не буду с меня пиво
|
Ads | |
Member
Регистрация: 31.10.2006
Сообщений: 40200
Записей в дневнике: 0
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 55070
|
|
|