Консультация # 189480: Здравствуйте, уважаемые эксперты! Прошу вас помочь! Никак не могу найти ошибку в коде, что именно не так или вообще ход мысли неверен?: /** Дано натуральное число N. Получить новое число M, которое образуется из числа N путём замены последней цифры на значение наибольшей цифры в записи числа N. Пример. N=128452, M=128458 */ Консультация # 189481: Здравствуйте! Прошу помощи в реализации на Си задачи: Дан текстовый файл, содержащий таблицу стоимости товаров в виде: Наименование: Цена. Записи имеют вид: Молоко 13.50. Вывести таблицу на экран, предварительно преобразовав записи к виду: Молоко 13 руб. 50 коп. Напишите, пожалуйста, идею и комментарии к строкам!...
Здравствуйте, уважаемые эксперты! Прошу вас помочь! Никак не могу найти ошибку в коде, что именно не так или вообще ход мысли неверен?:
/** Дано натуральное число N. Получить новое число M, которое образуется из числа N путём замены последней цифры на значение наибольшей цифры в записи числа N. Пример. N=128452, M=128458 */
#include <stdio.h> #include <stdlib.h>
int main() { system("chcp 1251");
int n,m,max=0,k;
printf("\nВведите натуральное число N: "); scanf("%d",&n);
while (n>0) { k=n%10; if (k>max) max=k; n=n/10; }
if ((n%10)!=max) { n=m%10; n=max-n; m=m+n; } printf ("\nНовое число M= %d", m); return 0; }
Здравствуйте, dasha.com! Где-то так... 1) Надо было сохранить старое значение числа 2) Новое число получается обнулением младшего разряда (делением и умножением на 10) и складыванием с максимальной цифрой. На мой взгляд, проверять на совпадение максимальной цифры с младшей необязательно, хотя можно и оставить, дело вкуса...
/**
Дано натуральное число N. Получить новое число M, которое образуется из числа
N путём замены последней цифры на значение наибольшей цифры в записи числа N.
Пример. N=128452, M=128458
*/
#include <stdio.h>
#include <stdlib.h>
int main()
{
system("chcp 1251 > nul");
int n,m,max=0,k;
printf("\nВведите натуральное число N: ");
scanf("%d",&n);
m = n;
while (n>0)
{
k=n%10;
if (k>max)
max=k;
n=n/10;
}
m=(m/10)*10+max;
printf ("Новое число M = %d\n", m);
return 0;
}
Консультировал: Лысков Игорь Витальевич (Старший модератор)
Дата отправки: 31.05.2016, 12:17
Здравствуйте! Прошу помощи в реализации на Си задачи:
Дан текстовый файл, содержащий таблицу стоимости товаров в виде: Наименование: Цена. Записи имеют вид: Молоко 13.50. Вывести таблицу на экран, предварительно преобразовав записи к виду: Молоко 13 руб. 50 коп.
Напишите, пожалуйста, идею и комментарии к строкам!
/*
Дан текстовый файл, содержащий таблицу стоимости товаров в виде:
Наименование: Цена.
Записи имеют вид: Молоко 13.50.
Вывести таблицу на экран, предварительно преобразовав записи к виду:
Молоко 13 руб. 50 коп.
*/
#include <stdio.h>
#include <stdlib.h>
#include <windows.h>
int main()
{
FILE* file = fopen("article.txt", "r"); //открываем текстовый файл на чтение
char line[256];
int i, len, f;
SetConsoleCP(1251);
SetConsoleOutputCP(1251); //для вывода русских букв
if (!file)
{
printf("File article.txt not found!"); //файл не найден!
return 1;
}
while (fgets(line, 256, file)) //читаем строку, == NULL, если файл кончился
{
len = strlen(line)-1; //уменьшим на один символ, т.к. в конце строки ненужный '\n'
line[len] = 0; //и затрем его нулем
for(i=len-1; i>=0 ;i--) //начиная с адреса последнего символа
{
if (line[i] == ' ') //ищем пробел. Это будет конец названия
{
line[i] = 0; //закроем строку названия нулем
break;
}
}
printf("%s ", line); //выводим название
for(f=0,i++; i<len; i++) //флаг f = 0 или 1, если точка не найдена/найдена
{ //выводим с позиции за бывшим пробелом, а это начало цены!
if (line[i] == '.') //ищем точку, разделитель между руб и коп
{
f = 1; //точка найдена
break;
}
printf("%c", line[i]); //выводим цифры рублей
}
printf(" руб."); //подписуем
if (f) //точка была?
printf(" %s коп.\n", (char*)&line[i+1]); //выводим копейки, они с позиции i+1 и до конца строки
else
printf(" 00 коп.\n"); //если точки не было, будет 00 коп
}
fclose(file);
system("pause");
return 0;
}
Команда портала RFPRO.RU благодарит Вас за то, что Вы пользуетесь нашими услугами. Вы только что прочли очередной выпуск рассылки. Мы старались.
Пожалуйста, оцените его. Если совет помог Вам, если Вам понравился ответ, Вы можете поблагодарить автора -
для этого в каждом ответе есть специальные ссылки. Вы можете оставить отзыв о работе портале. Нам очень важно знать Ваше мнение.
Вы можете поближе познакомиться с жизнью портала, посетив наш форум, почитав журнал,
который издают наши эксперты. Если у Вас есть желание помочь людям, поделиться своими знаниями, Вы можете зарегистрироваться экспертом.
Заходите - у нас интересно!