Форум программистов, компьютерный форум CyberForum.ru
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
 
tanya2505
1 / 1 / 0
Регистрация: 24.05.2011
Сообщений: 68
#1

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

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

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

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

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

При написании программы по нахождению минимума на экран ничего не выводится, почему? - C++
Вот код: METOD1.CPP #include "method.h" double Fun(double x) { return x*x*x-6*x*x+9*x+4; } int poisk() { double Xn,...

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

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

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

19
easybudda
Модератор
Эксперт CЭксперт С++
9663 / 5613 / 952
Регистрация: 25.07.2009
Сообщений: 10,776
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
2925 / 1354 / 135
Регистрация: 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
2925 / 1354 / 135
Регистрация: 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Эксперт С++
9663 / 5613 / 952
Регистрация: 25.07.2009
Сообщений: 10,776
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Эксперт С++
9663 / 5613 / 952
Регистрация: 25.07.2009
Сообщений: 10,776
13.01.2012, 12:34 #9
lemegeton, перечитал Вашу программу - нашёл косяк в своей.
Исправлю чуть позже...
0
lemegeton
2925 / 1354 / 135
Регистрация: 29.11.2010
Сообщений: 2,725
13.01.2012, 14:28 #10
Вы про это?
C
1
           return remove_if_not(s, islower);
0
easybudda
Модератор
Эксперт CЭксперт С++
9663 / 5613 / 952
Регистрация: 25.07.2009
Сообщений: 10,776
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
2925 / 1354 / 135
Регистрация: 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Эксперт С++
9663 / 5613 / 952
Регистрация: 25.07.2009
Сообщений: 10,776
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
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
13.01.2012, 15:45
Привет! Вот еще темы с ответами:

Нужна помоощь в написании программы в Си++, пожалуйста - C++
Задали написать прогу, мучился неделю и никак...

Помощь в написании программы, производящей вычисления и заносящей их в табличку - C++
Здравствуйте! Собственно, проблема такая... Нужно написать программу для ВТОРОГО ЗАДАНИЯ из лабораторной работы (первое уже сделано,...

Ошибка при написании аллокатора - C++
Всем привет! При написании собственного аллокатора столкнулся с ошибкой, указанной на скрин-шоте... Выкладываю файл с кодом... ...

Трудности при написании Морского боя - C++
Пишу курсовик на тему морской бой. в среде VS 2010. проект пишется в Win32. идёт очень плохо по ряду причин, одна из которых моя...


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

Или воспользуйтесь поиском по форуму:
15
Yandex
Объявления
13.01.2012, 15:45
Ответ Создать тему
Опции темы

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