Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 19.10.2009, 22:58   #1
xcyber
Пользователь
 
Регистрация: 17.12.2008
Сообщений: 11
По умолчанию Текстовые файлы, язык С

Возникло еще пару вопросов.
Имеется задача, находит в текстовом файле слова-палиндромы.

Код:
#include <stdio.h>
#include <ctype.h>
#include <string.h>
#define stroka  1000
#define slovo  100    

main()
{
    FILE *ifp, *ofp;
    char *reverse(char []);
    char line[stroka], word[slovo], tmp[slovo], *p;
    int nc;
    const char *ifname = "file.txt",
               *ofname = "result.txt";
    
    if ((ifp = fopen(ifname, "r")) == NULL
     || (ofp = fopen(ofname, "w")) == NULL)
        return 1;
    
    while ((p = fgets(line, stroka, ifp)) != NULL) {
        if (p[0] == '\n' || (p[0] == '\r' && p[1] == '\n'))
            break;
        while (sscanf(p, "%s%n", word, &nc) == 1) {
            p += nc;
            strcpy(tmp, word);
            if (strcmp(word, reverse(tmp)) == 0 && strlen(word) > 1)
                fprintf(ofp, "%s\n", word);
        }
    }
    fclose(ifp);
    fclose(ofp);        
    return 0;
}

/* обращает строку s */
char *reverse(char s[])
{
    char *p, *q;
    int c;
    
    p = q = s;
    while (*q)
        q++;
    for (q-- ; p < q; p++, q--)
        c = *p, *p = *q, *q = c;
    return s;
}
Правильно ли я составил алгоритм? Изображение алгоритма.

Последний раз редактировалось xcyber; 20.10.2009 в 14:22.
xcyber вне форума Ответить с цитированием
Старый 20.10.2009, 15:31   #2
xcyber
Пользователь
 
Регистрация: 17.12.2008
Сообщений: 11
По умолчанию

Со вторым вопросом справился, интересует алгоритм.
xcyber вне форума Ответить с цитированием
Старый 20.10.2009, 19:53   #3
MAKEDON
The First Person!
Форумчанин
 
Аватар для MAKEDON
 
Регистрация: 07.08.2007
Сообщений: 228
По умолчанию

Алгоритм прост. Создаешт массив символов из 255 символов. И в него по одному слову записываешь. Напиши функцию, проверяющую это слово(это сам надеюсь реализуешь). А потом делаешь с этим словом что угодно, потом на него считываешь новое. И так до конца текста. Просто не хочется изучать твой код.

Цитата:
/* обращает строку s */
А смысл это делать? Можно просто циклом пробежаться до середины слова. Проверяя последовательно буквы. Первую-последнюю, вторую предпоследнюю...и т.д.
Программа обычно делает то что вы ей сказали сделать, а не то что бы вы хотели, чтобы она сделала.

Последний раз редактировалось MAKEDON; 20.10.2009 в 19:56.
MAKEDON вне форума Ответить с цитированием
Старый 21.10.2009, 17:40   #4
xcyber
Пользователь
 
Регистрация: 17.12.2008
Сообщений: 11
По умолчанию

Алгоритм мне нужен графический в виде блок-схемы.
И блок схемы, как я понял, получается должно быть две: программы и функции реверс?
xcyber вне форума Ответить с цитированием
Старый 21.10.2009, 18:06   #5
Sweta
Форумчанин
 
Регистрация: 22.11.2007
Сообщений: 664
По умолчанию

Правильно должно быть две. В основном алгоритме вызов функции д.б изображен
----------------
! ! ! !
! ! ! !
----------------
кроме того в каждом блоке должно быть записано что он делает, к примеру в ромбе i==1 ?.Все блоки д.б. пронумерованы. У Вас в первом блоке анализа условий нет одного выхода. Вобще на выходах пишут Да и Нет, а не + и -.
К сожалению смещаются !, т.е.это прямоугольник с дополнительными полями
Неприятности приходят и уходят, а жизнь продолжается!

Последний раз редактировалось Sweta; 21.10.2009 в 18:09.
Sweta вне форума Ответить с цитированием
Старый 21.10.2009, 21:24   #6
xcyber
Пользователь
 
Регистрация: 17.12.2008
Сообщений: 11
По умолчанию

Sweta, это понятно, что всё должно быть подписано. У меня соображалки не хватает, чем бы всё подписать)
Я второй день сижу уже над этой прогой, бумагу перевожу.
Может кто-нибудь может нарисовать графический алгоритм, в виде блок-схемы? Буду очень благодарен.

Составил, но не знаю правильно ли? Вот - блоксхема.

Последний раз редактировалось Stilet; 23.10.2009 в 09:41.
xcyber вне форума Ответить с цитированием
Старый 24.10.2009, 15:55   #7
alexei88
Новичок
Джуниор
 
Регистрация: 24.10.2009
Сообщений: 1
По умолчанию

Код:
/* обращает строку s */
char *reverse(char s[])
{
    char *p, *q;
    int c;
    p = q = s;
    while (*q) q++;
    for (q-- ; p < q; p++, q--)
    c = *p, *p = *q, *q = c;
    return s;
}
А может кто-нибудь, дать комментарии к каждой строчке кода этой функции?
c = *p, *p = *q, *q = c; ни разу такого не видел.
alexei88 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Текстовые файлы _Smoke_ Помощь студентам 2 15.06.2009 15:12
текстовые файлы lusuj Помощь студентам 3 20.11.2008 19:18
Текстовые файлы на С Raptor Общие вопросы C/C++ 15 26.01.2008 21:06