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

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

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 15.07.2011, 14:44   #1
Glatos
Пользователь
 
Регистрация: 15.07.2011
Сообщений: 25
По умолчанию си

А всем привет и всё такое...
как улучшить программы?


Код:
/* Ввести натуральное число и найти сумму его цифр.
 * Организовать ввод числа так, чтобы нельзя было ввести
 * отрицательное число или нуль.
 * 
 */
main()
{
    int N, sum;                                 //sum - сумма цифр числа
    sum = 0;                                    // сначала сумму обнуляем
    do {                                        // начало цикла
        printf ( "\nВведите натуральное число:" );
        scanf ( "%12d", &N );
    }
    while ( N <= 0 );                            // условие цикла "пока N <= 0"
    while ( N > 0 ) {
        sum += N % 10;
        N /= 10;
    }
    printf ( "Сумма цифр этоого числа равна %d\n", sum );
}
___________________________________ ______________________________
^ если вводить больше 9ти цифр то результат всегда - 46 ^
___________________________________ ______________________________
Код:
/* 
 * File:   main.c
 * Author: auserna
 *
 * Created on 15 Июль 2011 г., 8:16
 */

#include <stdio.h>
#include <stdlib.h>

/* Ввести число и определить сколько в нём цифр.
 * 
 */
main()
{
    int N;                              // число, с которым работаем
    int count=0;                        // переменная-счётчик
    printf ( "\nВведите число N: " );    // подсказка
    scanf ( "%d", &N );                 // ввод N  с клавиатуры
    while ( N > 0 )                     // заколовок цикла " пока N > 0 "
    {                                   // начало цикла (открывающая скобка)
        N /= 10;                         // отсекаем последнюю цифру
                count ++;               // увеличиваем счётчик цифр
    }                                   //конец цикла (закрывающая скобка
    printf ( "В этом числе %d цифр\n", count );
 }
___________________________________ ______________________________
^ результат всегда не больше 10ти цифр ^
я знаю каратэ, дзюдо, канфу.... и много других страшных слов

Последний раз редактировалось ACE Valery; 16.07.2011 в 11:51.
Glatos вне форума Ответить с цитированием
Старый 15.07.2011, 15:07   #2
Mandrivnyk
Software Developer
Участник клуба
 
Аватар для Mandrivnyk
 
Регистрация: 01.03.2011
Сообщений: 1,098
По умолчанию

Цитата:
если вводить больше 9ти цифр то результат всегда - 46
угадай, почему? -)

А если считывать вводимое число в строку, то это ограничение можно обойти.
Болтовня ничего не стоит. Покажите мне код. (c) Linus Torvalds
Помог ответ? -- Поставьте отзыв.
Выражения особой благодарности в рублевом эквиваленте отправлять сюда --> R269634919062
Mandrivnyk вне форума Ответить с цитированием
Старый 15.07.2011, 15:15   #3
Glatos
Пользователь
 
Регистрация: 15.07.2011
Сообщений: 25
По умолчанию

ну наверное потому что памяти не хватает, объясни каким образом задать число?
я знаю каратэ, дзюдо, канфу.... и много других страшных слов
Glatos вне форума Ответить с цитированием
Старый 15.07.2011, 15:16   #4
Granus
С++
Форумчанин
 
Аватар для Granus
 
Регистрация: 22.09.2008
Сообщений: 791
По умолчанию

Если N - неположительное, то вот тут
Код:
while ( N <= 0 );
бесконечный цикл.

Updated

Это неправда)
Форматируйте код, будьте людьми.

Последний раз редактировалось Granus; 15.07.2011 в 15:27.
Granus вне форума Ответить с цитированием
Старый 15.07.2011, 15:24   #5
Smitt&Wesson
Старожил
 
Аватар для Smitt&Wesson
 
Регистрация: 31.05.2010
Сообщений: 13,543
По умолчанию

Цитата:
Сообщение от Granus Посмотреть сообщение
Если N - неположительное, то вот тут
Код:
while ( N <= 0 );
бесконечный цикл.
Внимательнее будьте.
Код:
do
{
Вводим N
}
while(N <=0);
Всё правильно. Бесконечный цикл, до момента ввода положительного числа.
Пиши пьяным, редактируй трезвым.
Справочник по алгоритмам С++ Builder
Smitt&Wesson вне форума Ответить с цитированием
Старый 15.07.2011, 15:27   #6
Granus
С++
Форумчанин
 
Аватар для Granus
 
Регистрация: 22.09.2008
Сообщений: 791
По умолчанию

А, да, точно, спасибо)
Редко пользуюсь просто такой формой, чаще while ( ) { }
Форматируйте код, будьте людьми.
Granus вне форума Ответить с цитированием
Старый 15.07.2011, 15:35   #7
Smitt&Wesson
Старожил
 
Аватар для Smitt&Wesson
 
Регистрация: 31.05.2010
Сообщений: 13,543
По умолчанию

Цитата:
Сообщение от Granus Посмотреть сообщение
А, да, точно, спасибо)
Редко пользуюсь просто такой формой, чаще while ( ) { }
это один из источников ошибок в C++.
Путаница с пред и постусловиями.
Цитата:
Сообщение от Mandrivnyk Посмотреть сообщение
А если считывать вводимое число в строку, то это ограничение можно обойти.
А если использовать тип double или float, то никакой строки и не нужно.
Пиши пьяным, редактируй трезвым.
Справочник по алгоритмам С++ Builder

Последний раз редактировалось Smitt&Wesson; 15.07.2011 в 15:55.
Smitt&Wesson вне форума Ответить с цитированием
Старый 15.07.2011, 15:40   #8
Granus
С++
Форумчанин
 
Аватар для Granus
 
Регистрация: 22.09.2008
Сообщений: 791
По умолчанию

Ну, у меня обычно с этим проблем нет) Хотя да, согласен, иногда нужно немножечко подумать, прежде чем ляпать условие.
Форматируйте код, будьте людьми.
Granus вне форума Ответить с цитированием
Старый 15.07.2011, 15:51   #9
Glatos
Пользователь
 
Регистрация: 15.07.2011
Сообщений: 25
По умолчанию

да не переживай, такой цикл очень редко используется и не рекомендуется, тут как раз сначала делается цикл а потом думает какое там условие, ладно пойду попробую другой тип переменной.. спасибо.
я знаю каратэ, дзюдо, канфу.... и много других страшных слов
Glatos вне форума Ответить с цитированием
Старый 15.07.2011, 18:43   #10
Сыроежка
Форумчанин
 
Регистрация: 01.07.2011
Сообщений: 423
По умолчанию

Цитата:
Сообщение от Glatos Посмотреть сообщение
А всем привет и всё такое...
как улучшить программы?


/* Ввести натуральное число и найти сумму его цифр.
* Организовать ввод числа так, чтобы нельзя было ввести
* отрицательное число или нуль.
*
*/
main()
{
int N, sum; //sum - сумма цифр числа
sum = 0; // сначала сумму обнуляем
do { // начало цикла
printf ( "\nВведите натуральное число:" );
scanf ( "%12d", &N );
}
while ( N <= 0 ); // условие цикла "пока N <= 0"
while ( N > 0 ) {
sum += N % 10;
N /= 10;
}
printf ( "Сумма цифр этоого числа равна %d\n", sum );
}

___________________________________ ______________________________
^ если вводить больше 9ти цифр то результат всегда - 46 ^
___________________________________ ______________________________
/*
* File: main.c
* Author: auserna
*
* Created on 15 Июль 2011 г., 8:16
*/

#include <stdio.h>
#include <stdlib.h>

/* Ввести число и определить сколько в нём цифр.
*
*/
main()
{
int N; // число, с которым работаем
int count=0; // переменная-счётчик
printf ( "\nВведите число N: " ); // подсказка
scanf ( "%d", &N ); // ввод N с клавиатуры
while ( N > 0 ) // заколовок цикла " пока N > 0 "
{ // начало цикла (открывающая скобка)
N /= 10; // отсекаем последнюю цифру
count ++; // увеличиваем счётчик цифр
} //конец цикла (закрывающая скобка
printf ( "В этом числе %d цифр\n", count );
}
___________________________________ ______________________________
^ результат всегда не больше 10ти цифр ^
У вас последний код

Код:
  int N;                              // число, с которым работаем
    int count=0;                        // переменная-счётчик
    printf ( "\nВведите число N: " );    // подсказка
    scanf ( "%d", &N );                 // ввод N  с клавиатуры
    while ( N > 0 )                     // заколовок цикла " пока N > 0 "
    {                                   // начало цикла (открывающая скобка)
        N /= 10;                         // отсекаем последнюю цифру
                count ++;               // увеличиваем счётчик цифр
    }                                   //конец цикла (закрывающая скобка
вообще некорректный, так как никто вам не запрещает ввести отрицательное число, и тогда ваш цткл с while вообще не будет работать.
Со мной можно встретиться на www.clipper.borda.ru
Сыроежка вне форума Ответить с цитированием
Ответ


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