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

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

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

Восстановить пароль
Повторная активизация e-mail

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

Ответ
 
Опции темы Поиск в этой теме
Старый 08.10.2012, 15:52   #1
Anna45345
 
Регистрация: 08.10.2012
Сообщений: 7
По умолчанию Задача на подпрограммы

Задача: нужно после ввода символа, чтоб определяла какому алфавиту принадлежит: русскому или английскому. Написала код. Посмотрите пожалуйста и укажите ошибки:


# include <conio.h>
# include <stdio.h>
const int n= 26;
{
int byk(char mas[n], char b, int c);
for (int i=0; i<n; i++){
if (mas[i]!=b) break;
else c++}
return c;
}


void main()
{
char a;
char mas[]={'a','b','c','d','e','f','g','h',' i','j','k','l','m','n','o','p','q', 'r','s','t','u','v','w','x','y','z' };
int i=0, c=0;
printf("VVedite a=",a);
scanf("%c",a);
byk (mas[i],a,i,c);
if (c==1) printf("Latinsciy"); else printf("Русский");

getch();
}
Anna45345 вне форума Ответить с цитированием
Старый 08.10.2012, 16:15   #2
DiemonStar
Старожил
 
Регистрация: 08.02.2012
Сообщений: 2,173
По умолчанию

а если я введу "D", то мне естественно напишет, что это русский шрифт, а я вводил на английском... как быть? не лучше ли работать с кодами символов, а не проверять на соответствие массиву?
Правильно поставленная задача - три четверти решения.
DiemonStar вне форума Ответить с цитированием
Старый 08.10.2012, 16:20   #3
Anna45345
 
Регистрация: 08.10.2012
Сообщений: 7
По умолчанию

формулировка задания полная: "Напишите подпрограмму определения принадлежности прописной буквы одному из алфавитов: русский, английский.
Anna45345 вне форума Ответить с цитированием
Старый 08.10.2012, 16:29   #4
DiemonStar
Старожил
 
Регистрация: 08.02.2012
Сообщений: 2,173
По умолчанию

я про другое: как вы различаете заглавные буквы и строчные? если что, "D" <> "d". Тут уже будет ошибка.

и вот вам немножко информации для ознакомления: http://ru.wikipedia.org/wiki/ASCII
Правильно поставленная задача - три четверти решения.
DiemonStar вне форума Ответить с цитированием
Старый 08.10.2012, 16:44   #5
Anna45345
 
Регистрация: 08.10.2012
Сообщений: 7
По умолчанию

А я их и не различила... и к сожалению не знаю, как обращение делать к ASCII-кодам. поэтому сказали достаточно сделать через прописные, без учета регистра
Anna45345 вне форума Ответить с цитированием
Старый 08.10.2012, 17:01   #6
DiemonStar
Старожил
 
Регистрация: 08.02.2012
Сообщений: 2,173
По умолчанию

Код:
bool Alf(char a);
{int b
bool c
b = a
c = b >> 7
return c;
}
один из "простейших вариантов" проверки символа на язык (не совсем правильно, но...)

з.ы. ногами не пинайте - C почти не знаю
Правильно поставленная задача - три четверти решения.
DiemonStar вне форума Ответить с цитированием
Старый 08.10.2012, 17:13   #7
Anna45345
 
Регистрация: 08.10.2012
Сообщений: 7
По умолчанию

если честно,я не совсем понимаю... только вступаю в ряды программирования на си. зачем 7? что вообще это значит?
Anna45345 вне форума Ответить с цитированием
Старый 08.10.2012, 18:15   #8
8Observer8
Старожил
 
Аватар для 8Observer8
 
Регистрация: 02.01.2011
Сообщений: 3,323
По умолчанию

Оформляйте код правильно, заключая его в теги: <code> </code> (вместо угловых - квадратные скобки). Или выделите код и нажмите кнопку решётки в редакторе форума.

Код:
# include <conio.h>
# include <stdio.h>

const int n= 26;

{
    int byk(char mas[n], char b, int c);
    for (int i=0; i<n; i++) {
        if (mas[i]!=b) break;
        else c++
        }
    return c;
}


void main()
{
    char a;
    char mas[]= {'a','b','c','d','e','f','g','h',' i','j','k','l','m','n','o','p','q', 'r','s','t','u','v','w','x','y','z' };
    int i=0, c=0;
    printf("VVedite a=",a);
    scanf("%c",a);
    byk (mas[i],a,i,c);
    if (c==1) printf("Latinsciy");
    else printf("Русский");

    getch();
}
У вас почти в каждой строчке ошибка. Вообще в начале изучения никогда не пишите код целиком, а пишите по частям и проверяйте запускается или нет. Идея у вас какая-то есть, её нужно просто реализовать. Кодом DiemonStar дополнить и задача решена.

Вот для примера вам написал программку, которая считает сумму элементов массива. Чтобы вы видели работающий вариант:
Код:
#include <stdio.h>

#define N 4

int sumOfArray(int array[], int n);

int main ()
{
    int sum, i;
    int array[N];

    // Ввод данных от пользователя
    printf("Enter %d elements of array: ", N);
    for (i = 0; i < N; i++) {
        scanf("%d", &array[i]);
    }

    // Вычисление суммы
    sum = sumOfArray(array, N);

    // Вывод результата на экран консоли
    printf("\nSum is %d\n\n", sum);

    return 0;
}

// sumOfArray: суммирует элементы массива
int sumOfArray(int array[], int n)
{
    int sum = 0, i;

    // Подсчитываем сумму
    for (i = 0; i < n; i++) {
        sum += array[i];
    }

    return sum;
}
Результат запуска:

Последний раз редактировалось 8Observer8; 08.10.2012 в 18:22.
8Observer8 вне форума Ответить с цитированием
Старый 08.10.2012, 19:02   #9
8Observer8
Старожил
 
Аватар для 8Observer8
 
Регистрация: 02.01.2011
Сообщений: 3,323
По умолчанию

Цитата:
Сообщение от Anna45345 Посмотреть сообщение
если честно,я не совсем понимаю... только вступаю в ряды программирования на си. зачем 7? что вообще это значит?
Следующая программа выводит коды букв 'b' и 'б' на экран (читайте комментарии и смотрите картинку):
Код:
#include <stdio.h>
#include <locale.h>

int main ()
{
    unsigned char letter;

    // Настраиваем консоль на вывод русских букв
    setlocale(LC_ALL, "Russian");

    // Присваиваем переменной с латинскую букву
    letter = 'b';
    // Выводим результат в шестнадцатеричном коде
    printf("The Latin latter = %c. Hex code: %0X\n\n", letter, letter);

    // Присваиваем переменной с латинскую букву
    letter = 'б';
    // Выводим результат в шестнадцатеричном коде
    printf("The Russian latter = %c. Hex code: %0X\n\n", letter, letter);

    return 0;
}
Результат запуска программы:


Теперь объясняю:
Как видите код буквы 'b' - это 62h или 0110 0010 И как видите, седьмой бит равен нулю (если начинать счёт с нуля)

Теперь посмотрим на букву 'б' - это E1h или 1110 0001 Как видите, седьмой бит равен единице

В этом и отличие русских букв от латинских. У латинский букв седьмой бит равен нулю, а у русских единице.

Оператор >> сдвигает число на требуемое количество бит вправо.

Покажу на примере:
Код:
#include <stdio.h>
#include <locale.h>

int main ()
{
    unsigned char letter;
    unsigned char isletter;

    // Настраиваем консоль на вывод русских букв
    setlocale(LC_ALL, "Russian");

    // Присваиваем переменной с латинскую букву
    letter = 'b';
    // Выводим результат в шестнадцатеричном коде
    printf("The Latin latter = %c. Hex code: %0X\n\n", letter, letter);

    // Чему же равен седьмой бит?
    isletter = letter >> 7;
    // Выводим седьмой бит
    printf("The seventh bit is %d\n\n", isletter);

    // Присваиваем переменной с латинскую букву
    letter = 'б';
    // Выводим результат в шестнадцатеричном коде
    printf("The Russian latter = %c. Hex code: %0X\n\n", letter, letter);

    // Чему же равен седьмой бит?
    isletter = letter >> 7;
    // Выводим седьмой бит
    printf("The seventh bit is %d\n\n", isletter);

    return 0;
}
Результат запуска программы:


P.S. Обязательно пишите unsigned char, чтобы избежать проблемы расширения знака.
P.S.S. Тип bool компилятором, который я использую, не поддерживается.

Последний раз редактировалось 8Observer8; 08.10.2012 в 19:16.
8Observer8 вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
задача на подпрограммы и системы счисления ПаЗитиФкА Помощь студентам 6 28.11.2011 23:25
задача на подпрограммы (функции) mashat99 Помощь студентам 2 29.05.2011 19:45
Pascal-задача на файлы, подпрограммы Tasha_no Помощь студентам 4 08.07.2010 23:03
Подпрограммы-процедуры, подпрограммы-функции в Pascal rishikesh Помощь студентам 19 18.05.2010 23:05