Форум программистов, компьютерный форум, киберфорум
Наши страницы
C для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.96/25: Рейтинг темы: голосов - 25, средняя оценка - 4.96
G_lion
0 / 0 / 0
Регистрация: 19.08.2017
Сообщений: 34
1

Проверить истинность: "Данное четырехзначное число читается одинаково слева направо и справа налево"

21.10.2018, 18:45. Просмотров 4616. Ответов 15
Метки нет (Все метки)

Составить программу,печатающую значение true,если высказывание является истинным, и false - в противоположном случае.Данные для формирование условия должны вводится с клавиатуры. При необходимости ,выполнить проверку веденных данных.
Задание
Данное четырехзначное число читается одинаково слева направо и справа налево
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
21.10.2018, 18:45
Ответы с готовыми решениями:

Проверить истинность высказывания: данное число читается одинаково слева направо и справа налево
Дано четырехзначное число. Проверить истинность высказывания: данное число читается одинаково слева...

Определить симметричен ли массив т.е. читается ли он слева направо и справа налево
Помогите пожалуйста массив одномерный

Вывести на экран слова из этой строки, которые одинаково читаются слева направо и справа налево (палиндромы)
Составить программу, которая вводит с клавиатуры строку, содержащую до 80 символов, и выводит на...

Указатели: Выполнить циклические сдвиги первой половины массива справа налево, второй – слева направо
Дано натуральное число N (N – четное) и одномерный массив A1, A2, ..., AN логических элементов....

Проверить истинность высказывания: «Данное целое число является четным двузначным числом»
Проверить истинность высказывания: «Данное целое число является четным двузначным числом».

15
stake-k26
537 / 410 / 323
Регистрация: 25.04.2016
Сообщений: 1,191
22.10.2018, 05:51 2
Лучший ответ Сообщение было отмечено G_lion как решение

Решение

C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#include <stdio.h>
 
int main (void)
{
    char c[80];             // массив для записи числа
    scanf("%s", c);         // получаем число с клавиатуры
    int i, k, len, result = 1;
 
    /* узнаем длину числа */
    i=len=0;
    while (c[i++])len++;
    if (len-4) return 0;    // длина числа не соответствует 4
 
    /* сравниваем символы в записи числа */
    for (i=0, k=len-1; i<k && result>0; i++, k--)
        if (c[i] - c[k]) result = 0;    // если хотя бы 1 не совпал, конец
 
    /* результат на экран */
    printf("%s\n", (result>0)?"true":"false");
    return 0;
}
Добавлено через 8 минут
более защищенный вариант, который позволит избежать выхода за границы массива:
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#include <stdio.h>
 
int main (void)
{
    char c[5];                  // массив для записи числа
    scanf("%4s", c);            // получаем число с клавиатуры
    int i, k, len = 4, result = 1;
 
    /* сравниваем символы в записи числа */
    for (i=0, k=len-1; i<k && result>0; i++, k--)
        if (c[i] - c[k]) result = 0;    // если хотя бы 1 не совпал, конец
 
    /* результат на экран */
    printf("%s\n", (result>0)?"true":"false");
    return 0;
}
Добавлено через 1 минуту
но в этом случае программа будет выдавать верный результат при проверке числа 22221, поскольку функция scanf прочитает только первые 4 символа.

Добавлено через 20 минут
ну и чисто математический вариант:
C
1
2
3
4
5
6
7
8
9
10
11
12
13
#include <stdio.h>
 
int main (void)
{
    int n, d, res = 0;
    scanf("%d", &n);
 
    for (d=n; d>0; d/=10)
        res = res*10 + d%10;
 
    printf("%s\n", (n == res)?"true":"false");
    return 0;
}
Добавлено через 1 минуту
тут можно в цикл for добавить счетчик шагов и таким образом узнать количество символов в записи числа, и если оно не равно 4, выводить соответствующее сообщение.

Добавлено через 2 минуты
можно добавить проверку на числа, в записи которых есть только одинаковые символы, типа 2222 или 1111:

if (n/100 == n%100)...

и только если эта проверка не прошла, запускать цикл.
1
easybudda
Модератор
Эксперт CЭксперт С++
10210 / 6107 / 1536
Регистрация: 25.07.2009
Сообщений: 11,606
22.10.2018, 16:38 3
Цитата Сообщение от stake-k26 Посмотреть сообщение
тут можно в цикл for добавить счетчик шагов и таким образом узнать количество символов в записи числа, и если оно не равно 4, выводить соответствующее сообщение.
stake-k26, просто на всякий случай:
Цитата Сообщение от G_lion Посмотреть сообщение
четырехзначное число
это которое меньше 10000 и больше 999
1
G_lion
0 / 0 / 0
Регистрация: 19.08.2017
Сообщений: 34
24.10.2018, 09:45  [ТС] 4
Чераз условный операто как будет?? Подскажите
0
Kuzia domovenok
2430 / 2157 / 528
Регистрация: 25.03.2012
Сообщений: 7,775
Записей в блоге: 1
24.10.2018, 10:06 5
G_lion, то есть ты прочитал всю тему и ничерта не понял?
для кого тут stake-k26 распинается? Для девочек-гуманитариев?
0
stake-k26
537 / 410 / 323
Регистрация: 25.04.2016
Сообщений: 1,191
24.10.2018, 16:24 6
Лучший ответ Сообщение было отмечено G_lion как решение

Решение

Кажется я догадываюсь в чем дело.
C
1
printf("%s\n", (n == res)?"true":"false");
G_lion, здесь используется тернарный оператор сравнения, т.е. то же самое условие, только в более короткой записи, и если эту запись развернуть до обычного условия, получится:
C
1
2
3
4
if (n == res)
    printf("true\n");
else
    printf("false\n");
Думаю имея пример перед глазами, остальные вы сможете развернуть самостоятельно.
1
G_lion
0 / 0 / 0
Регистрация: 19.08.2017
Сообщений: 34
30.10.2018, 10:07  [ТС] 7
Я правильно сделала?
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#include <iostream>
#include <math.h> 
#include <stdio.h> 
#include <conio.h> 
#include <locale.h>
  
int main (void)
{
    int n, d, res = 0;
    scanf("%d", &d);
    
 if (d>0)   
  res = res*10 + d%10;
  d/=10 ;
 
 if (n == res)
    printf("true\n");
else
    printf("false\n");
  
    return 0;
0
Kuzia domovenok
2430 / 2157 / 528
Регистрация: 25.03.2012
Сообщений: 7,775
Записей в блоге: 1
30.10.2018, 10:10 8
Лучший ответ Сообщение было отмечено G_lion как решение

Решение

что мешает скомпилировать собрать и проверить?
0
G_lion
0 / 0 / 0
Регистрация: 19.08.2017
Сообщений: 34
30.10.2018, 10:17  [ТС] 9
Правильно работает!
0
stake-k26
537 / 410 / 323
Регистрация: 25.04.2016
Сообщений: 1,191
30.10.2018, 18:03 10
G_lion, нет, неправильно.

if (n == res) .. чему у вас равно n в программе? Поскольку его начальное значение не задано, программа всегда будет выдавать false.

Далее у вас по заданию: "Данное четырехзначное число читается одинаково слева направо и справа налево", а в коде:
C
1
2
if (d>0)   
  res = res*10 + d%10;
т.е. берется только последняя цифра из записи числа. А нужно проверить все число, т.е. все символы из записи числа.. А значит, тут нужен не if, а как минимум while. Ну или на худой конец goto. Подумайте как следует. Уверен, у вас все получится.

Добавлено через 4 минуты
Вообще, как можно было взять рабочий код, в котором нужно было поменять всего лишь 1 строчку и так его изуродовать?
G_lion, определенно у вас выдающиеся способности в модификации.

Добавлено через 1 час 24 минуты
Судя по всему вы в легком ступоре, а потому, начнем пожалуй, разбирать алгоритм работы программы с самого низкого уровня:

вариант уно (почти самый низкий уровень):
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
#include <stdio.h>
 
int main (void)
{
    int n, d, res = 0;
    scanf("%d", &d);    // получаем число d с клавиатуры
 
    n = d;              // поскольку d будет делиться, запоминаем текущее значение d
    start_circle:       // запускаем цикл
        if (d != 0)         // цикл будет выполняться, пока в числе d есть хотя бы 1 цифра
        {
            res = res*10 + d%10;    // узнаем последнюю цифру числа d и записываем ее в res
            d /= 10;                // убираем уже прочитанную последнюю цифру из числа d
            goto start_circle;      // возвращаемся к проверке условия цикла
        }
    /* конец цикла,
     * в результате выполнения которого, в res
     * будет записано перевернутое число d */
 
    if (n == res)       // сравниваем запомненное число d с перевернутым
        printf("true\n");
    else
        printf("false\n");
 
    return 0;           // конец программы
}
вариант дос (то же самое, только чуть повыше):
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
#include <stdio.h>
 
int main (void)
{
    int n, d, res = 0;
    scanf("%d", &d);    // получаем число d с клавиатуры
 
    n = d;              // поскольку d будет делиться, запоминаем текущее значение d
    /* запускаем цикл while - по сути это более компактная форма записи goto */
    while (d != 0)          // цикл будет выполняться, пока в числе d есть хотя бы 1 цифра
    {
        res = res*10 + d%10;    // узнаем последнюю цифру числа d и записываем ее в res
        d /= 10;                // убираем уже прочитанную последнюю цифру из числа d
        // возвращаемся к проверке условия цикла
    }
    /* конец цикла while,
     * в результате выполнения которого, в res
     * будет записано перевернутое число d */
 
    if (n == res)       // сравниваем запомненное число d с перевернутым
        printf("true\n");
    else
        printf("false\n");
 
    return 0;           // конец программы
}
вариант трес (еще чуть повыше):
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#include <stdio.h>
 
int main (void)
{
    int n, d, res = 0;
    scanf("%d", &d);    // получаем число d с клавиатуры
 
    for (n=d; d!=0; d/=10)      // цикл for - куда более компактная запись цикла while
        res = res*10 + d%10;
 
    if (n == res)
        printf("true\n");
    else
        printf("false\n");
 
    return 0;
}
И наконец, финишная прямая:
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
#include <stdio.h>
 
int main (void)
{
    int n, d, res = 0;
    scanf("%d", &d);
 
    for (n=d; d!=0; d/=10)
        res = res*10 + d%10;
 
    printf("%s\n", (n == res)?"true":"false");  // более компактная запись if
 
    return 0;
}
Если и после этого какие-то вопросы возникнут, пишите.
1
G_lion
0 / 0 / 0
Регистрация: 19.08.2017
Сообщений: 34
31.10.2018, 21:46  [ТС] 11
ну да не правильно у меня((

Добавлено через 32 минуты
у меня вопроса почему это получ при 10 ти значное число

Добавлено через 36 минут
спасибо вам огромное я всё понел
0
G_lion
0 / 0 / 0
Регистрация: 19.08.2017
Сообщений: 34
31.10.2018, 22:02  [ТС] 12
Я правильно построилв блок схему??
0
Миниатюры
Проверить истинность: "Данное четырехзначное число читается одинаково слева направо и справа налево"  
stake-k26
537 / 410 / 323
Регистрация: 25.04.2016
Сообщений: 1,191
01.11.2018, 20:39 13
G_lion, я блок-схемы уже лет 100 не строил, так что не могу подсказать. Последний раз это было когда-то очень давно еще до появления мобильных телефонов и интернетов.

Добавлено через 22 минуты
Блок-схемы были полезны во времена программирования в машинном коде и затем, на ассемблере, но с появлением языков "высокого" уровня, вроде алгол или фортран - это стало никому не нужной тратой времени, чем-то рудиментарным. Сейчас, например, если нужно объяснить логику работы программы, принято использовать псевдокод, хотя и он уже сдает позиции, уступая место языку python. А этот раритет.. я не знаю зачем его до сих пор преподают. Попробуйте, например, составить блок-схему MS Office - это вполне реально, только сколько жизней на это уйдет?
1
Kuzia domovenok
2430 / 2157 / 528
Регистрация: 25.03.2012
Сообщений: 7,775
Записей в блоге: 1
02.11.2018, 10:08 14
stake-k26, я это и без вас знал - обычно именно это и говорю школоте, что все их блок-схемы были полезны, когда каждая строчка в программе нумеровалася номером-меткой перехода и код был испещрён переходом по этим меткам как в каком-нибудь Фокале или раннем доисторическом Бейсике.
1
stake-k26
537 / 410 / 323
Регистрация: 25.04.2016
Сообщений: 1,191
02.11.2018, 22:39 15

Не по теме:

Kuzia domovenok, сообщение было адресовано не вам. :)



Кстати да, спасибо, что напомнили на счет меток. Особенно когда код на нескольких листах или вообще на бумажной ленте и где-нибудь в начале сразу идет переход на строку 3306, а оттуда, строки эдак с 5000 тебя возвращали назад в самое начало.. разбираться в таком коде было тем еще удовольствием. Или хабы условий, когда при выполнении условия раз, нужно перейти на метку 12, при условии 2 перейти на метку 1000, а при условии 3 поменять значение и перейти на строку 8, где тебя поджидала еще пара таких развилок.. Даже от комментариев толку не было. И тут блок-схемы были просто незаменимым подспорьем.

Сейчас такого дурдома, прозванного некогда "макаронным" программированием, нет, а вместе с ним исчезла и необходимость в блок-схемах.
1
G_lion
0 / 0 / 0
Регистрация: 19.08.2017
Сообщений: 34
05.11.2018, 20:58  [ТС] 16
Поможете мне с этим заданием
Использование циклов и условий: табулирование функции, заданной графически
0
05.11.2018, 20:58
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
05.11.2018, 20:58

Задача на определение количества слов, которые слева и справа читаются одинаково
Прошу натолкнуть на мысль как решить данную задачу: &quot;Дана строка. Необходимо определить количество...

Определить количество слов, которые слева и справа читаются одинаково (палиндромов) во введенной строке
В общем пытался написать задачу, в которой я ввожу строку и нужно определить количество слов,...

Дано натуральное n. Вычислить сумму ряда двумя способами – организовав вычисления суммы слева направо и справа
Дано натуральное n. Вычислить сумму ряда двумя способами – организовав вычисления суммы слева...


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

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

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