Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.67/6: Рейтинг темы: голосов - 6, средняя оценка - 4.67
tanya2505
1 / 1 / 0
Регистрация: 24.05.2011
Сообщений: 68
#1

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

12.01.2012, 18:37. Просмотров 1098. Ответов 19
Метки нет (Все метки)

дано задание:
"Проверить, является ли выражение, состоящее только из прописных букв заданной строки, палиндромом. Если да, то напечатать полученный палиндром. В противном случае вывести строку, состоящую из символов исходной строки с удаленными прописными символами."
подскажите пожалуйста, с чего начать программу
хоть что-нибудь подскажите, буду очень благодарна
0
Лучшие ответы (1)
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
12.01.2012, 18:37
Ответы с готовыми решениями:

Ошибка при написании программы
Добрый день! у меня вопрос по поводу ошибки при написании программного кода....

В каком направлении следует развиваться программисту C++
Сразу просьба не ругаться т.к. такие темы многих раздрожают)) Прочитал пару...

В каком направлении развиваться после изучения основ С++
После пройденого материала в институте и сдачи экзамена и курсача я задался...

При написании программы по нахождению минимума на экран ничего не выводится, почему?
Вот код: METOD1.CPP #include "method.h" double Fun(double x) { return...

Что-то для изменения формата вывода в консоли. В каком направлении идти
Есть измерительное устройство, которое подключается через COM-порт к ПО Putty....

19
easybudda
Модератор
Эксперт CЭксперт С++
10029 / 5953 / 1486
Регистрация: 25.07.2009
Сообщений: 11,251
12.01.2012, 18:53 #2
tanya2505, суть задания не совсем понятна. То есть
aBcdEfGEhB -> BEGEB
AbcDe -> bce
так должно получиться?

И язык программирования укажите - для С и С++ решения будут разные.
0
tanya2505
1 / 1 / 0
Регистрация: 24.05.2011
Сообщений: 68
12.01.2012, 19:11  [ТС] #3
easybudda, ну например исходная строка 1rK4ABAfgK, результат KABAK или BuRAtino, utino не палиндром

Добавлено через 13 минут
easybudda, на С++
0
lemegeton
2933 / 1362 / 467
Регистрация: 29.11.2010
Сообщений: 2,725
12.01.2012, 19:27 #4
Лучший ответ Сообщение было отмечено как решение

Решение

Ну можно и так.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
#include <iostream>
#include <string>
#include <iterator>
 
bool isPalyndrom(const std::string &string) {
  if (string.size() == 0) return false;
  std::string::const_iterator i = string.begin();
  std::string::const_iterator j = string.end() - 1;
  while (i < j)
    if (*i++ != *j--)
      return false;
  return true;
};
 
template<class InputIterator, class OutputIterator, class Predicate>
OutputIterator copy_if(InputIterator first, InputIterator last,
  OutputIterator result, Predicate predicate) {
  for (; first != last; ++first)
    if (predicate(*first))
      *result++ = *first;
  return result;
}
 
bool isCapital(char c) {
  return (c >= 'A' && c <= 'Z');
}
 
bool isNotCapital(char c) {
  return !isCapital(c);
}
 
std::string getOnlyCapital(const std::string &string) {
  std::string result;
  copy_if(string.begin(), string.end(),
    std::back_inserter<std::string>(result), isCapital);
  return result;
}
 
std::string getNoCapital(const std::string &string) {
  std::string result;
  copy_if(string.begin(), string.end(),
    std::back_inserter<std::string>(result), isNotCapital);
  return result;
}
 
int main(int argc, char *argv[]) {
//  std::string word = "1rK4ABAfgK";
  std::string word = "BuRAtino";
 
  std::string capitals = getOnlyCapital(word);
  if (isPalyndrom(capitals))
    std::cout << capitals << std::endl;
  else
    std::cout << getNoCapital(word) << std::endl;
}
4
tanya2505
1 / 1 / 0
Регистрация: 24.05.2011
Сообщений: 68
12.01.2012, 19:50  [ТС] #5
lemegeton, пишет- не найден файл iterator и ошибку в синтаксисе выдает в 5 строчке
0
lemegeton
2933 / 1362 / 467
Регистрация: 29.11.2010
Сообщений: 2,725
12.01.2012, 20:08 #6
Цитата Сообщение от tanya2505 Посмотреть сообщение
lemegeton, пишет- не найден файл iterator и ошибку в синтаксисе выдает в 5 строчке
Ну дык приведите ошибку-то.

Это чем вы компилируете таким, что нет iterator'а? Borlan C?
0
tanya2505
1 / 1 / 0
Регистрация: 24.05.2011
Сообщений: 68
12.01.2012, 20:25  [ТС] #7
lemegeton, я думаю, что из-за отсутствия файла iterator, возникают все ошибки и т.д
unable to open include file 'iterator'
declaration sintax error 2 раза в 5 и 15 строчке
Borland C
0
easybudda
Модератор
Эксперт CЭксперт С++
10029 / 5953 / 1486
Регистрация: 25.07.2009
Сообщений: 11,251
13.01.2012, 00:40 #8
Цитата Сообщение от tanya2505 Посмотреть сообщение
на С++
Цитата Сообщение от tanya2505 Посмотреть сообщение
Borland C
На таком С++ лучше уже ничего не писать. Вот Вам на С
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
#include <stdio.h>
#include <string.h>
#include <ctype.h>
 
#define WORD_LEN 128
#define WORD_MASK "%127s"
 
int is_palindrome(const char * s) {
    const char * t = s + strlen(s) - 1;
    
    while ( s < t && *s == *t ) {
        ++s;
        --t;
    }
    
    return ( s >= t );
}
 
char * remove_if_not(char * s, int (*test_func)(int)) {
    char * r = s;
    
    while ( *s ) {
        if ( ! test_func(*s) )
            memmove(s, s+1, strlen(s));
        else
            ++s;
    }
    
    return r;
}
 
char * change_func(char * s) {
    static char buf[WORD_LEN];
    char * pb, * ps;
    
    for ( pb = buf, ps = s; *ps; ++ps )
        if ( isupper(*ps) )
            *pb++ = *ps;
    *pb = '\0';
    
    if ( is_palindrome(buf) )
        return remove_if_not(s, isupper);
    else
        return remove_if_not(s, islower);
}
 
int main(void){
    char wrd[WORD_LEN];
    
    while ( printf("Word: ") && scanf(WORD_MASK, wrd) == 1 )
        printf("Result: %s\n", change_func(wrd));
    
    return 0;
}
Выход - Ctrl+Z и Enter нажать.
в каком направлении действовать при написании программы
Вроде работает...
1
easybudda
Модератор
Эксперт CЭксперт С++
10029 / 5953 / 1486
Регистрация: 25.07.2009
Сообщений: 11,251
13.01.2012, 12:34 #9
lemegeton, перечитал Вашу программу - нашёл косяк в своей.
Исправлю чуть позже...
0
lemegeton
2933 / 1362 / 467
Регистрация: 29.11.2010
Сообщений: 2,725
13.01.2012, 14:28 #10
Вы про это?
C
1
           return remove_if_not(s, islower);
0
easybudda
Модератор
Эксперт CЭксперт С++
10029 / 5953 / 1486
Регистрация: 25.07.2009
Сообщений: 11,251
13.01.2012, 14:43 #11
Цитата Сообщение от lemegeton Посмотреть сообщение
Ты про это?
ага.
Вот исправленная:
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
#include <stdio.h>
#include <string.h>
#include <ctype.h>
 
#define WORD_LEN 128
#define WORD_MASK "%127s"
 
int is_palindrome(const char * s) {
    const char * t = s + strlen(s) - 1;
        
    while ( s < t && *s == *t ) {
        ++s;
        --t;
    }
        
    return ( s >= t );
}
 
char * remove_if(char * s, int (*test_func)(int)) {
    char * r = s;
    
    while ( *s ) {
        if ( test_func(*s) )
            memmove(s, s+1, strlen(s));
        else
            ++s;
    }
    
    return r;
}
 
char * remove_if_not(char * s, int (*test_func)(int)) {
    char * r = s;
        
    while ( *s ) {
        if ( ! test_func(*s) )
            memmove(s, s+1, strlen(s));
        else
            ++s;
    }
        
    return r;
}
 
char * change_func(char * s) {
    static char buf[WORD_LEN];
    char * pb, * ps;
        
    for ( pb = buf, ps = s; *ps; ++ps )
        if ( isupper(*ps) )
            *pb++ = *ps;
    *pb = '\0';
        
    if ( is_palindrome(buf) )
        return remove_if_not(s, isupper);
    else
        return remove_if(s, isupper);
}
 
int main(void){
    char wrd[WORD_LEN];
        
    while ( printf("Word: ") && scanf(WORD_MASK, wrd) == 1 )
        printf("Result: %s\n", change_func(wrd));
        
    return 0;
}
0
lemegeton
2933 / 1362 / 467
Регистрация: 29.11.2010
Сообщений: 2,725
13.01.2012, 14:50 #12
Другой вариант модификации кода от easybudda.
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
#include <stdio.h>
#include <string.h>
#include <ctype.h>
 
#define WORD_LEN 128
#define WORD_MASK "%127s"
 
int is_palindrome(const char * s) {
        const char * t = s + strlen(s) - 1;
        
        while ( s < t && *s == *t ) {
                ++s;
                --t;
        }
        
        return ( s >= t );
}
 
char * remove_if_not(char * s, int (*test_func)(int)) {
        char * r = s;
        
        while ( *s ) {
                if ( ! test_func(*s) )
                        memmove(s, s+1, strlen(s));
                else
                        ++s;
        }
        
        return r;
}
 
int isnotupper(int c) {
        return !isupper(c);
}
 
char * change_func(char * s) {
        static char buf[WORD_LEN];
        char * pb, * ps;
        
        for ( pb = buf, ps = s; *ps; ++ps )
                if ( isupper(*ps) )
                        *pb++ = *ps;
        *pb = '\0';
        
        if ( is_palindrome(buf) )
                return remove_if_not(s, isupper);
        else
                return remove_if_not(s, isnotupper);
}
 
 
int main(void){
        char wrd[WORD_LEN];
        
        while ( printf("Word: ") && scanf(WORD_MASK, wrd) == 1 )
                printf("Result: %s\n", change_func(wrd));
        
        return 0;
}

Не по теме:

Кстати, никогда не задумывался, что isupper принимает int.

0
tanya2505
1 / 1 / 0
Регистрация: 24.05.2011
Сообщений: 68
13.01.2012, 15:11  [ТС] #13
спасибо большое! в понедельник я видать повешусь на экзамене..с такими то программами
0
easybudda
Модератор
Эксперт CЭксперт С++
10029 / 5953 / 1486
Регистрация: 25.07.2009
Сообщений: 11,251
13.01.2012, 15:28 #14
Цитата Сообщение от lemegeton Посмотреть сообщение
Другой вариант
Не не заглавная буква? Ну да, можно и так...


Цитата Сообщение от tanya2505 Посмотреть сообщение
в понедельник я видать повешусь на экзамене..с такими то программами
А что с ними не так? Не понятно - спрашивайте (только не "что в каждой строчке происходит")...
0
tanya2505
1 / 1 / 0
Регистрация: 24.05.2011
Сообщений: 68
13.01.2012, 15:45  [ТС] #15
easybudda, сложные просто0 у нас на экзамене полегче буду, типа сумму вычислить или функцию..что там говорить, если даже такие элементарные программы не получаются))
кучу учебников пересмотрела-все бестолку))
0
R136a1
143 / 112 / 36
Регистрация: 14.04.2011
Сообщений: 261
13.01.2012, 16:15 #16
если ещё актуально, вот полегче вариант
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
#include <stdio.h>
#include <string.h>
#include <ctype.h>
 
int testPolindrom(char [], int, int);
 
int main()
{
    char t[128];
    char capital[128];
    int i;
    int j = 0;
 
    gets(t);
 
    for(i = 0; i < strlen(t); i++)
        if(isupper(t[i]))
        {
            capital[j] = t[i];
            j++;
        }
 
    capital[j] = 0;
 
    if(strlen(capital) % 2 != 0 && testPolindrom(capital,0,strlen(capital)-1))
        printf("%s\n",capital);
    else
    {
        for(i = 0; i < strlen(t); i++)
            if(islower(t[i]))
                printf("%c",t[i]);
 
        printf("\n");
    }
 
    return 0;
}
 
int testPolindrom(char t[], int begin, int end)
{
    if(begin < end)
    {
        if(t[begin] != t[end])
            return 0;
 
        testPolindrom(t,begin+1,end-1);
    }
    else
        return 1;
}
1
easybudda
Модератор
Эксперт CЭксперт С++
10029 / 5953 / 1486
Регистрация: 25.07.2009
Сообщений: 11,251
13.01.2012, 16:25 #17
R136a1,
Код
$ ./R136a1
xxxABCCBAxxx
xxxxxx
1
R136a1
143 / 112 / 36
Регистрация: 14.04.2011
Сообщений: 261
13.01.2012, 16:33 #18
упс
в 25 строчке косяк

исправил

C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
#include <stdio.h>
#include <string.h>
#include <ctype.h>
 
int testPolindrom(char [], int, int);
 
int main()
{
    char t[128];
    char capital[128] = {0};
    int i;
    int j = 0;
 
    gets(t);
 
    for(i = 0; i < strlen(t); i++)
        if(isupper(t[i]))
        {
            capital[j] = t[i];
            j++;
        }
 
    capital[j] = 0;
 
    if(strlen(capital) > 1 && testPolindrom(capital,0,strlen(capital)-1))
        printf("%s\n",capital);
    else
    {
        for(i = 0; i < strlen(t); i++)
            if(islower(t[i]))
                printf("%c",t[i]);
 
        printf("\n");
    }
 
    return 0;
}
 
int testPolindrom(char t[], int begin, int end)
{
    if(begin < end)
    {
        if(t[begin] != t[end])
            return 0;
 
        testPolindrom(t,begin+1,end-1);
    }
    else
        return 1;
}
0
lemegeton
2933 / 1362 / 467
Регистрация: 29.11.2010
Сообщений: 2,725
14.01.2012, 02:33 #19
Ну можно попробовать еще ужать.
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
#include <stdio.h>
#include <string.h>
#include <ctype.h>
#include <stdlib.h>
 
int isPalyndrom(const char *string) {
  if (*string == '\0') return 0;
  const char *i = string;
  const char *j = string + strlen(string) - 1;
  while (i < j)
    if (*i++ != *j--)
      return 0;
  return 1;
};
 
int isNotUpper(int c) {
  return !isupper(c);
}
 
char *strcpyif(char *destination, const char *source, int (*predicate)(int)) {
  char *result = destination;
  for (; *source != '\0'; ++source)
    if (predicate(*source))
      *destination++ = *source;
  *destination = '\0';
  return result;
}
 
int main(int argc, char *argv[]) {
  char string[] = "BxxxxxCB";
  char buffer[sizeof(string)];
  strcpyif(buffer, string, isupper);
  if (!isPalyndrom(buffer))
    strcpyif(buffer, string, isNotUpper);
  printf("%s\n", buffer);
  return 0;
};
0
easybudda
Модератор
Эксперт CЭксперт С++
10029 / 5953 / 1486
Регистрация: 25.07.2009
Сообщений: 11,251
14.01.2012, 03:39 #20
Цитата Сообщение от lemegeton Посмотреть сообщение
Ну можно попробовать еще ужать.
Ну или вообще без выпендрёжа
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
#include <stdio.h>
#include <string.h>
#include <ctype.h>
 
#define WRD_LEN 128
#define WRD_MASK "%127s"
 
int main(void){
    char wrd[WRD_LEN], pal[WRD_LEN], * pWrd, * pHead, * pTail;
    
    while ( printf("Word: ") && scanf(WRD_MASK, wrd) == 1 ){
        for ( pWrd = wrd, pHead = pTail = pal; *pWrd; ++pWrd )
            if ( isupper(*pWrd) )
                *pTail++ = *pWrd;
    
        while ( --pTail > pHead && *pTail == *pHead )
            ++pHead;
    
        if ( pTail <= pHead ){
            for ( pWrd = wrd; *pWrd; ){
                if ( ! isupper(*pWrd) )
                    memmove(pWrd, pWrd+1, strlen(pWrd));
                else
                    ++pWrd;
            }
        }
        else {
            for ( pWrd = wrd; *pWrd; ){
                if ( isupper(*pWrd) )
                    memmove(pWrd, pWrd+1, strlen(pWrd));
                else
                    ++pWrd;
            }
        }
        
        printf("Result: %s\n", wrd);
    }
    
    return 0;
}
но так не интересно
0
14.01.2012, 03:39
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
14.01.2012, 03:39

Трудности в написании программы СИ++
Привет всем обитателям форума, уже несколько дней мучаюсь с написанием...

Помогите в написании программы (C++)
За каждый ход генерируется случай n-ое число от 0 до 6 (моделируется выпадание...

Помочь в написании программы. (С матрицами)
Здравствуйте, дорогие форумчане. ----------------------------------- Мне...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru