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

Написать функцию, которая в заданном натуральном числе n заменяет младшую цифру на цифру 9

01.02.2015, 14:16. Просмотров 1087. Ответов 15
Метки нет (Все метки)

Задача: Написать на языке С функцию, которая в заданном натуральном числе n заменяет младшую цифру на цифру 9, если старшая цифра числа n больше 2 (число n является, как минимум, двузначное). Главная программа должна задавать входные данные, обращаться к функции и выводить результаты.

Никак не дойду...
Буду очень благодарна помощи!
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
01.02.2015, 14:16
Ответы с готовыми решениями:

Возвести во введенном натуральном числе каждую цифру в степень, соответствующую ее позиции в числе
Помогите, каким образом это можно сделать? Возвести во введенном...

В описании программа, которая заменяет каждую цифру в строке на следующую. Исправьте в ней ошибку
#include <stdio.h> int main() { int i,j; char s; const char*...

Разработать функцию, которая возвращает вторую справа цифру натурального числа
Разработать функцию F(x) , которая возвращает вторую справа цифру натурального...

Составить рекурсивную функцию, которая вычисляет максимальную цифру целого числа n
Составить рекурсивную функцию, которая вычисляет максимальную цифру целого...

Вычислить сумму цифр в заданном натуральном числе
привет всем. в общем задача целиком такая: Напишите функцию, которая вычисляет...

15
Байт
Эксперт C
20042 / 12664 / 2662
Регистрация: 24.12.2010
Сообщений: 26,370
01.02.2015, 16:19 2
KatiaFomina, Сделайте (и покажите) хотя бы каркас программы (инклюды, майн, ввод данных) и может быть (если есть, конечно) ваши попытки решения. Поймите, это не занудство, а способ узнать, хотя бы приблизительно, на каком языке с вами разговаривать
0
KatiaFomina
0 / 0 / 0
Регистрация: 30.11.2014
Сообщений: 12
03.02.2015, 00:43  [ТС] 3
Байт, Я студентка на первом курсе, поэтому прошу извинить меня, если делаю что-то не так..
Помогите мне, как начинающему програмисту, пожалуйста!)

Вот то что мне было под силу.

C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#include<stdio.h>
#include<math.h>
 
int n, nz;
int fun(int n);
int main(int n, int nz)
{
    fun(n);
    printf("%s" "REZ= ", "%d", nz);
    return 0;
}
 
int fun(int n)
{
    if(n>9) // Проверяем что даное число как минимум двузначное.
//дальше я не знаю как выделить старшую цифру... =>> 
//Далее проверяем старшую цифру и если она больше 2,то выделяем младшую цифру и заменяем ее на цифру 9...
//проблема в том, что я не знаю как выделить младшую/старшую цифры и потом заменить одну из них в числе.
}
0
S_el
2223 / 1688 / 354
Регистрация: 15.12.2013
Сообщений: 6,735
03.02.2015, 00:49 4
KatiaFomina, пара вопросов
1) Что делаем,если число начинается с 1?
2) Напишите алгоритм,согласно которому вы хотите написать программу(может у вас есть идея,но вы не знаете,как её реализовать на языке C)
Советую поискать похожие темы,посмотрите как решались подобные задания и сможете сделать по аналогии.
0
Байт
Эксперт C
20042 / 12664 / 2662
Регистрация: 24.12.2010
Сообщений: 26,370
03.02.2015, 10:41 5
C
1
2
3
4
5
6
7
int fun(int n)
{ int k = n;
    while(k/10) k /= 10;
              // k - старшая цифра
    if (k>2) n = (n/10)*10 + k;
    return n;
}
0
KatiaFomina
0 / 0 / 0
Регистрация: 30.11.2014
Сообщений: 12
03.02.2015, 13:50  [ТС] 6
S_el, здравствуйте, если число начинается с 1 или 2, то так и пишем "Число начинается с 1 или 2" и выводим старое число.

Алгоритм примерно такой:
1) Проверяем что даное число больше 9 (тоесть двузначное и больше);
а) Если больше 9, продолжаем с п. 2);
б) Если число меньше или равно 9 - выводим на экран "Ошибка, введите другое число" и закрываем
программу.
2) Выделяем старшую цифру числа;
3) Проверяем что она больше 2:
а) Если да, то заменяем младшую цифру натурального числа, на 9 и выводим результат.
б) Если старшая цифра равна 1 или 2, выводим на экран "Число начинается с 1 или 2" и выводим старое число.
4) Конец.
0
Байт
Эксперт C
20042 / 12664 / 2662
Регистрация: 24.12.2010
Сообщений: 26,370
03.02.2015, 14:08 7
KatiaFomina, А мой код вам не понравился?
Попробуйте его модифицировать под свои условия...
0
StaticCast
0 / 0 / 0
Регистрация: 03.02.2015
Сообщений: 2
03.02.2015, 17:01 8
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
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
/*Задача: Написать на языке С функцию, которая в заданном натуральном числе n заменяет младшую цифру на цифру 9, если старшая цифра числа n больше 2 (число n является, как минимум, двузначное). Главная программа должна задавать входные данные, обращаться к функции и выводить результаты.
*/
 
#include <iostream>
#include <stdio.h>
#include <stdlib.h>
 
using namespace std;
 
int func_analiz_n(int nat_num);
 
int main()
{
    int nat_number,new_nat;     // числа   (но может нужен long)
    
    for (;;)
    {
        cout<<"Введите натуральное число больше 9_";
        cin>>nat_number;
        
        if(nat_number>9)
        {
            new_nat=func_analiz_n(nat_number);
            if (new_nat!=nat_number)
                cout <<"\nНовое число="<<new_nat<<endl;
            else
                cout<<"\nЧисло не изменили \n";
        }
        else
        {          //  или напишите иной способ выхода из цикла
            cout<<"\nЗадано неверное число -> завершение работы ! \n";
            break;
        }
    }
    
    return 0;
}
int func_analiz_n(int nat_num)
{
    char str_num[10];       // строка -куда сохраним число (чтобы проще перебирать цифры)
                            // или придумайте варианты с деление на 10-ю степень
    char chr;
    char* pchr;
    int new_num=0;         //новое число
    int arr_n[9];          // массив, куда положим все цифры введенного числа (размер 9,чтобы не заморачиваться)
    int i,j,jj,n10;
    size_t len_str;
    
    for (i=0;i<9;i++) arr_n[i]=0;        // обнуляем массив
    
    sprintf(str_num, "%d", nat_num);     // получили строковое представление числа
    len_str=strlen(str_num);
 
    
    for (i=0;i<len_str;i++)            // формируем массив цифр
    { chr=str_num[i];   pchr=&chr;
      arr_n[i]=atoi(pchr);
    }
    
    int p9=1;                    //  анализ , что число состоит только из девяток  (тк 99 не поменяешь)
    for (i=0;i<len_str;i++)
    {  if (arr_n[i]<9) p9=7; }
    if (1==p9)
    {   cout <<"В числе только 9-ки - нечего менять ! \n";
        return (nat_num);
    }
 
    
      // в массиве будем искать цифру меньшую цифру, но при этом она должна быть больше чем 2
      // те, как я понял задание : если число 11..1 или 22..2 или 12121..2 , то оно не меняется
      // если 13  то должно получится 93
      // если 113 то 913  - те меняется первая младшая цифра на 9
      // если 103 то 193
      // если 223 то 923
      // поэтому также нужно найти максимальную цифру, чтобы понять : менять или отказ
    
    int n_min=10;                // младшая цифра числа
    int ind_min=-1;              // индекс минимальной цифры в массиве ( -1 означает,что не нашли)
    int n_max=-1;                // старшая цифра числа  (чтобы понять - есть ли в числе цифры более 2)
    int ind_max=-1;              // индекс старшей цифры
    for (i=0;i<len_str;i++)
    {
      if (n_max<arr_n[i])   { n_max=arr_n[i]; ind_max=i; }    // нашли  новый максимум
      if (n_min>arr_n[i])   { n_min=arr_n[i]; ind_min=i; }    // нашли новый минимум
        
    }
 
    if (n_max<3)
    {
        cout <<" Максимальная цифра введенного числа="<<n_max<< " (менее 3-х,поэтому число не меняем!) \n";
        return (nat_num);
    }
    
    if (ind_min>-1)            // в числе ЕСТЬ цифра, которую мы меняем
        arr_n[ind_min]=9;
    else                       // в числе нет цифры больше чем 2  ( например число 222222 или 12121212)
    {
           cout <<" Ошибка проги - не нашли миимальную цифру !!! \n";
           return (nat_num);
    }
 
 
    jj=(int)len_str;
    for (i=0;i<len_str;i++)
    {   n10=1;
        for (j=1;j<jj;j++) n10=n10*10;
        jj--;
 
        new_num=new_num+arr_n[i]*n10;
    }
 
    
    return(new_num);
}
//**********
примерно так на С++ , если у вас С нужно будет переработать
Если вы учитесь на программиста - алгоритм расписывайте подробно (легче писать программу)
0
S_el
2223 / 1688 / 354
Регистрация: 15.12.2013
Сообщений: 6,735
03.02.2015, 17:16 9
Цитата Сообщение от StaticCast Посмотреть сообщение
примерно так на С++ , если у вас С нужно будет переработать
из 1-ого поста:
Цитата Сообщение от KatiaFomina Посмотреть сообщение
Написать на языке С функцию
0
StaticCast
0 / 0 / 0
Регистрация: 03.02.2015
Сообщений: 2
03.02.2015, 17:56 10
Sl, я обратил внимание, что нужен код на С.
Но также я обратил внимание на ответ вам, что делать , если число начинается на 1.
И скажем так: мой вариант функции из "123" сделает "923".
Пусть автор темы рассудит- полезен ему мой вариант (хотя бы для понимания как такие задачи нужно делать) и если нужно переработает на свой лад/вкус/...
И если у автора темы С , а не С++ , то есть надежда, что решение будет не просто скопировано, но и переделано.
0
KatiaFomina
0 / 0 / 0
Регистрация: 30.11.2014
Сообщений: 12
04.02.2015, 01:35  [ТС] 11
Байт, S_el, StaticCast, Я воспользовалась Вашими подсказками, что-то додумала сама и вот что у меня получилось:

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
#include <stdio.h>
#include <math.h>
 
 
int fun(int n);
 
int main()
{
    int p=9; // Число на которое будем заменять
    int n=0, nz=0;
    printf("Введите натуральное число больше 9");
    scanf_s("%d",&n);
    if(n>9)
    {
        nz=fun(n);
        if (n!=nz)
            printf("\nНовое число=""%d", nz);
        else
            printf("\nЧисло не изменили \n");
    }
    else
    {
    printf("\nЗадано неверное число -> завершение работы ! \n");
    
    }
    return 0;
}
 
int fun(int n, int p, int nz)
{
    int k=n;
    while(k/10) k/=10; // k - старшая цифра
    if(k>2)
    {
    nz=(n/10)*10 + p; // Новое число
    }
    else
    {
    printf("\nЗадано неверное число -> завершение работы ! \n");
    }
    return(nz);
}
Только вот проблема:
1>------ Построение начато: проект: ConsoleApplication3, Конфигурация: Debug Win32 ------
1> Исходный код.cpp
1>Исходный код.obj : error LNK2019: ссылка на неразрешенный внешний символ "int __cdecl fun(int)" (?fun@@YAHH@Z) в функции _main
1>C:\Users\Sovri_000\Visual studio\ConsoleApplication3\Debug\ConsoleApplication3.exe : fatal error LNK1120: неразрешенных внешних элементов: 1

========== Построение: успешно: 0, с ошибками: 1, без изменений: 0, пропущено: 0 ==========


Вот такая ошибка вылетает...
Что с этим можно сделать?

Код вроде должен работать... может найдете что-то еще.

Пользуюсь MS Visual Studio 2010 prof.
0
S_el
2223 / 1688 / 354
Регистрация: 15.12.2013
Сообщений: 6,735
04.02.2015, 01:42 12
Цитата Сообщение от KatiaFomina Посмотреть сообщение
Вот такая ошибка вылетает...
Что с этим можно сделать?
Пересоздать проект,попробовать другой компилятор или способ компиляции(консоль),поискать неразрешенный символ(студия иногда ругается,если копируемый текст в другой кодировке или еще-что).

А вообще у вас функция fun имеет 3 аргумента,зачем вызывать с 1?Да и прототипу не соответствует.
1
KatiaFomina
0 / 0 / 0
Регистрация: 30.11.2014
Сообщений: 12
04.02.2015, 02:04  [ТС] 13
S_el, Поправила, спасибо!
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
#include <stdio.h>
#include <math.h>
 
 
int fun(int n, int p, int nz);
 
int main()
{
    int p=9; // Число на которое будем заменять
    int n=0, nz=0;
    printf("Введите натуральное число больше 9");
    scanf_s("%d",&n);
    if(n>9)
    {
        nz=fun(n,p,nz);
        if (n!=nz)
            printf("\nНовое число=""%d", nz);
        else
            printf("\nЧисло не изменили \n");
    }
    else
    {
    printf("\nЗадано неверное число -> завершение работы ! \n");
    
    }
    return 0;
}
 
int fun(int n, int p, int nz)
{
    int k=n;
    while(k/10) k/=10; // k - старшая цифра
    if(k>2)
    {
    nz=(n/10)*10 + p; // Новое число
    }
    else
    {
    printf("\nЗадано неверное число -> завершение работы ! \n");
    }
    return(nz);
}
0
S_el
2223 / 1688 / 354
Регистрация: 15.12.2013
Сообщений: 6,735
04.02.2015, 02:09 14
Цитата Сообщение от KatiaFomina Посмотреть сообщение
Поправила, спасибо!
Еще пара вопросов:
1)зачем подключаете math.h
2)для чего передаете целочисленную переменную nz в функцию?
3)для чего передаете целочисленную переменную p в функцию?
1
KatiaFomina
0 / 0 / 0
Регистрация: 30.11.2014
Сообщений: 12
04.02.2015, 02:14  [ТС] 15
S_el, скажите пожалуйста, что нужно сделать чтоб русские слова отображались корректно?

Добавлено через 4 минуты
S_el, для перестраховки

тогда так:
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
#include <stdio.h>
 
int fun(int n);
 
int main()
{
    int n=0, nz=0;
    printf("BBEDITE CHISLO");
    scanf_s("%d",&n);
    if(n>9)
    {
        nz=fun(n);
        if (n!=nz)
            printf("NOVOE CHISLO=""%d", nz);
        else
            printf("\n NE IZMENILI \n");
    }
    else
    {
    printf("\n ERROR 1 \n");
    
    }
    return 0;
}
 
int fun(int n)
{
    int p=9; // Число на которое будем заменять
    int nz;
    int k=n;
    while(k/10) k/=10; // k - старшая цифра
    if(k>2)
    {
    nz=(n/10)*10 + p; // Новое число
    }
    else
    {
    printf("\nERROR 2 \n");
    }
    return(nz);
}
0
S_el
2223 / 1688 / 354
Регистрация: 15.12.2013
Сообщений: 6,735
04.02.2015, 02:16 16
C
1
setlocale(LC_ALL,"rus");
возможно потребуется подключить
C
1
locale.h
Иногда проблема с консольным шрифтом(надо поставить Lucida Console),иногда кодировка не соответствует(надо будет пересохранить файл в требуемую).
Если ничего из вышеперечисленного не поможет,почитайте:
Русские шрифты в консоли
может найдете рецепт.


Цитата Сообщение от KatiaFomina Посмотреть сообщение
тогда так:
Я не из праздного любопытства вопросы задаю.Это ваша программа и вы должны четко понимать,почему сделали так или иначе.
2
04.02.2015, 02:16
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
04.02.2015, 02:16

Составить функцию, которая определяет, верно ли, что в заданном числе все цифры стоят по возрастанию
Составить функцию, которая определяет, верно ли, что в заданном числе все цифры...

Найти наименьшую цифру в числе
Можете помочь сделать задание: найти наименьшую цифру в числе N. Сам я только...

В числе удалить повторяющуюся цифру
Нужно в числе удалить повторяющуюся цифру. Помогите найти ошибку в функции:...


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

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

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