Версия для печати темы

Нажмите сюда для просмотра этой темы в обычном формате

Форум «Всё о Паскале» _ Ада и другие языки _ Задачка

Автор: Fee 9.11.2006 0:49

Задание:Определить, я является ли введенное с клавиатуры целое число кодом латинской прописной или строчной буквы. Если это так, вывести на экран изображение строчной буквы один раз, а прописной - два раза. В противном случае вывести на экран изображение вопросительного знака.

не могли бы вы подсказать, как определить, код прописной или строчной буквы?

Автор: volvo 9.11.2006 1:06

В файле CTYPE.H описаны 2 очень подходящих макроса:


int islower(int ch); // Не ноль, если ch в нижнем регистре (строчная)
int isupper(int ch); // Не ноль, если ch в верхнем регистре (прописная)


Автор: Fee 9.11.2006 1:37

ну на сколько я понимаю, это должно выглядеть вот так:

Код
#include <stdio.h>
#include <string.h>
#include <ctype.h>

int main(void)
{
    char s[80], s1[80], s2[80];


    int a = 0, b = 0, i;
    gets(s);


    for (i = 0; s[i] != '\0'; i++)
        if (isupper(s[i])) s1[a++] = s[i];
if (isupper(s[i])) s1[a++] = s[i];
    else
        if (islower(s[i])) s2[b++] = s[i];
    else
        printf ("?");

    s1[a] = '\0'; s2[b] = '\0';
    puts(s1);
    puts(s2);

    
    return 0;
}

поправьте что не верно пожалуйста

Автор: мисс_граффити 9.11.2006 6:26

мне почему-то кажется, что тут надо воспользоваться следующим свойством: коды прописных латинских букв 65-90, а строчных - 97-122 (могу ошибаться со значениями, таблицы под рукой нет).

твоя программка, по-моему, не совсем совпадает с заданием.
по условию:

Цитата
является ли введенное с клавиатуры целое число

в приведенном коде:
Цитата
gets(s);
for (i = 0; s[i] != '\0'; i++)
...

то есть допустим мы введем 98.
рассматриваем как строку (нумерация в строке с нуля?)
s[0] у нас '9'.
isupper(s[i]) получается равносильно isupper('9').
как думаешь, что вернет функция?

В общем, я бы делала так:


{
int kod;
//ввод значения переменной kod
if ((kod>64)&&(kod<91))
{
//двойной вывод Char(kod) - то есть символа, соответствующего коду;
}
else
if ((kod>96)&&(kod<123))
{
//вывод Char(kod);
}
else
{
//вывод вопросительного знака
}
}


Если хочешь, чтобы программа легче читалась и не пришлось запоминать коды, можно сравнивать не числа, а буквы, им соответствующие.

Автор: Savas 9.11.2006 20:28

Если не сложно выложите пожалуйста полное решение данной задачи unsure.gif , зарание большое спасибо rolleyes.gif

Автор: мисс_граффити 9.11.2006 23:03

если устроит ввод/вывод через Edit - без проблем напишу.
если нужно консольное - сам разбирайся.

Автор: Гость 9.11.2006 23:36

давай....smile.gif а то я чет не могу разобраться

Автор: Алена 9.11.2006 23:53

Вариант "запутайся сам, но и преподавателя запутай":

#include <stdio.h>
#include <ctype.h>

int main() {
int i, code, upper;

puts("enter the char code:");
scanf("%d", &code);

for(i = 0; i < 1 + (upper = isupper(code) ? 1 : 0); ++i)
printf("%c", (upper || islower(code)) ? code : '?');
return 0;
}

Автор: Гость 10.11.2006 0:38

чет не то, он все время выпросительный знак выдает....

Автор: Алена 10.11.2006 0:41

Что вводили, чтобы проверить? На чем компилируете?

Автор: Гость 10.11.2006 1:17

турбо с
вводить как я понимаю надо большую и маленькую букву... (соотвественно F и f)

Автор: Алена 10.11.2006 1:26

Цитата
вводить как я понимаю надо большую и маленькую букву
Неправильно понимаешь... Смотрим задание:
Цитата
является ли введенное с клавиатуры целое число кодом латинской прописной или строчной буквы


Вводишь число, а не символы... Например, попробуй ввести 66 (это код прописной 'B'), и посмотри, что будет... Попробуй 98 (это тоже код 'b', только строчной)... Ну, и то, что не входит в диапазоны, описанные мисс_граффити... Вот тут действительно будет печататься знак вопроса.

Автор: Гость 10.11.2006 1:32

спасибо, понялsmile.gif)
а не могли бы вы комменты приписать, ну что для чего и какsmile.gif чтоб я разобраться смог...
и еще как сделать, чтобы када запускаешь еще раз "enter...." на новой строчке были... а то результат сливается с этой надписью

Автор: Гость 10.11.2006 2:07

напиши перед первым выводом \n

Автор: Гость 10.11.2006 5:01

а что есть первый вывод? :/

Автор: Алена 10.11.2006 5:13

puts("\nenter the char code:");

Автор: Гость 10.11.2006 5:27

он же выведет эту надпись .....:/

Автор: Алена 10.11.2006 5:35

Цитата
он же выведет эту надпись
Какую надпись? Кто выведет? Управляющие символы что, в С уже отменили? А как начинаются управляющие символы? Не с бэкслеша, случайно? А "\n" - уже не перевод строки? Тогда, пожалуйста, приведите цитату из Стандарта, в которой говорится, что \n внутри строки может НЕ трактоваться как символ перевода строки...

Все-таки, сначала нужно попробовать то, что посоветовали сделать, а потом уже что-то отвечать...