Форум программистов, компьютерный форум, киберфорум
C для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/7: Рейтинг темы: голосов - 7, средняя оценка - 5.00
0 / 0 / 0
Регистрация: 12.09.2018
Сообщений: 8
1

Условие для цикла

21.09.2018, 01:32. Показов 1327. Ответов 11

Author24 — интернет-сервис помощи студентам
Здравствуйте, никак не доходит как сделать цикл для такого условия:

C
1
2
3
4
5
6
7
8
int n,org, n1, n2, n3,n4, n5;
org = n;//оригинальное значение
n/=10;
n1 = n -(n%10) + (org%10);
n2 = n1 -(n1%100) + (org%100);
n3 = n2 -(n2%1000) + (org%1000);
n4 = n3 -(n3%10000) + (org%10000);
n5 = n4 -(n4%100000) + (org%100000);
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
21.09.2018, 01:32
Ответы с готовыми решениями:

Не выполняется условие для окончания цикла
Подскажите в чем прикол? пишу условия для окончания цикла , j->next!=i|| i!=j записать пробовал по...

Не могу составить условие для цикла do-while
#include <stdio.h> #include <conio.h> main() { char c; do c=getch();...

Условие для цикла Do While
имеется таблица MS Word, в некоторых ячейках которой имеется текст со шрифтом красного цвета. в...

Условие для цикла
Вводится ряд целых чисел от 0 до 9, сколько чисел неизвестно, потом с ними производятся операции...

11
Диссидент
Эксперт C
27706 / 17322 / 3812
Регистрация: 24.12.2010
Сообщений: 38,979
21.09.2018, 09:09 2
Например так
C
1
2
3
4
5
6
7
8
int n,org, nn[6], i, p=10;
org = n;//оригинальное значение
n/=10;
nn[0] = n;
for(i=0; i<5; i++) {
  nn[i+1] = nn[i] - nn[i]%p + org%p;
  p *= 10;
}
0
0 / 0 / 0
Регистрация: 12.09.2018
Сообщений: 8
21.09.2018, 10:08  [ТС] 3
Спасибо, но дело в том, что нужно обойтись без массивов. Вообще как цель стоит написать кусок кода, который бы поочередно выкидывал по одной цифре из числа. Если есть еще идеи -- буду очень благодарна)
0
Модератор
Эксперт по электронике
8908 / 6677 / 918
Регистрация: 14.02.2011
Сообщений: 23,521
21.09.2018, 10:12 4
Цитата Сообщение от 1101m Посмотреть сообщение
Вообще как цель стоит написать кусок кода, который бы поочередно выкидывал по одной цифре из числа.
C
1
2
3
4
5
while(n)
{
printf("%d",n%10);
n/=10;
}
0
0 / 0 / 0
Регистрация: 12.09.2018
Сообщений: 8
21.09.2018, 11:10  [ТС] 5
Имеется ввиду убирать поочередно цифры, оставляя прежнее их количество- 1.
то есть, если n = 123456, то потом 12345, 12346, 12356, 12456, 13456, 23456
0
Диссидент
Эксперт C
27706 / 17322 / 3812
Регистрация: 24.12.2010
Сообщений: 38,979
21.09.2018, 22:40 6
Лучший ответ Сообщение было отмечено 1101m как решение

Решение

А если так?
C
1
2
3
4
5
6
p = 1;
for(k=0; k<6; k++) {
  x = n/(p*10)*p + n%p;
  printf("%d\n", x);
  p *= 10;
}
Добавлено через 10 часов 54 минуты
Цитата Сообщение от 1101m
Спасибо большое за помощь Если есть секунда времени, может сможете порекомендовать хорошие гайды о структурах и указателях в СИ? Также, если просто знаете хорошие источники о различных алгоритмах, расскажите о них, пожалуйста. А то впереди еще дикие задачи (как для полного нуба), где нужно избегать overflow. Еще раз спасибо!
Есть правило 4.6. Читали? Если нет - ознакомьтесь.
Хотите поблагодарить - есть специальная кнопочка.
Есть вопросы - публикуйте на форуме.
Желательно поконкретнее. А то в этой теме я только к 5-му посту понял, что вам именно нужно. Скажи вы это сразу, задача уже 20 раз была решена. И не только мной.
Структуры и указатели? - Я учился по K&R и больше как бы ничего не было нужно. Хотя, наверное, ноне есть и другие хорошие книжки. Вот тут на форуме, стоит вам задать вопрос, и вы получите кучу информации, о которой я даже и не ведаю.
Алгоритмы? Мне нравится Липски. Хотя читать его трудно. Примеры на Алголо-подобном, есть и ошибки. И очень древнее. Тут вам подскажут и посвежее, и на современных языках. На то и Форум.
Желаю удачи!
Только в личку такую ерунду больше не пишите, ладно?
1
Модератор
Эксперт по электронике
8908 / 6677 / 918
Регистрация: 14.02.2011
Сообщений: 23,521
21.09.2018, 22:54 7
Цитата Сообщение от Байт Посмотреть сообщение
for(k=0; k<6; k++)
я бы чутка добавил
чтобы не только шестизначные числа вводить
C
1
2
3
4
5
6
7
int tmp=n
int s=0;
while(tmp)
{s++;
tmp/=10;
}
for(k=0; k<s; k++)
ну а далее по тексту
1
Диссидент
Эксперт C
27706 / 17322 / 3812
Регистрация: 24.12.2010
Сообщений: 38,979
21.09.2018, 23:00 8
ValeryS, Ну да. В моем коде единственная привязка к шестизначности - строка 2 - "k < 6"
0
Модератор
Эксперт PythonЭксперт JavaЭксперт CЭксперт С++
12458 / 7482 / 1753
Регистрация: 25.07.2009
Сообщений: 13,762
21.09.2018, 23:34 9
Цитата Сообщение от 1101m Посмотреть сообщение
дело в том, что нужно обойтись без массивов
А что не так с массивами? И кстати, со строками проще, правда, медленнее. Но, если скорость - не главное, то:
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
 
int main(void) {
    int n;
    
    while ( printf("Number: ") && scanf("%d", &n) == 1 && n > 0 ) {
        char buf[32], * p;
        
        sprintf(buf, "%d", n);
        for ( p = buf + strlen(buf) - 1; p >= buf; --p, sprintf(buf, "%d", n) ) {
            memmove(p, p + 1, strlen(p));
            printf("%d\n", atoi(buf)); // ну или что там Вы с этими числами делать собираетесь
        }
    }
    
    return 0;
}
Код
[andrew@easybook numbers]$ gcc -Wall wodigits.c 
[andrew@easybook numbers]$ ./a.out 
Number: 123456 
12345
12346
12356
12456
13456
23456
Number: 1234567890
123456789
123456780
123456790
123456890
123457890
123467890
123567890
124567890
134567890
234567890
Number: q
[andrew@easybook numbers]$
0
Диссидент
Эксперт C
27706 / 17322 / 3812
Регистрация: 24.12.2010
Сообщений: 38,979
21.09.2018, 23:52 10
Цитата Сообщение от easybudda Посмотреть сообщение
со строками проще
C
1
2
3
4
char s[] = "1234567890";
int k = strlen(s);
for(i=k-1; i>=0; i--);
 printf("%-*.*s%s\n", i, i, s, s+i+1);
Не проверял, но где-то здесь можно найти истину
0
Модератор
Эксперт PythonЭксперт JavaЭксперт CЭксперт С++
12458 / 7482 / 1753
Регистрация: 25.07.2009
Сообщений: 13,762
22.09.2018, 00:04 11
Байт, по-моему так ничего не выйдет...
Выводит
Код
$ ./a.out 
12345678901234567890
1
Диссидент
Эксперт C
27706 / 17322 / 3812
Регистрация: 24.12.2010
Сообщений: 38,979
22.09.2018, 09:32 12
C
1
2
3
4
5
6
7
8
#include <stdio.h>
int main() {
char s[] = "1234567890";
int i, k = strlen(s);
for(i=k-1; i>=0; i--)  // Вот тут была точка с запятой!
 printf("%-*.*s%s\n", i, i, s, s+i+1);
return 0;
}
Код
123456789
123456780
123456790
123456890
123457890
123467890
123567890
124567890
134567890
234567890
Прошу прощения у почтенной публики. Стандартная новичковая ошибка, мне, конечно, непростительная.
Точка с запятой после for. Со всеми вытекающими.
1
22.09.2018, 09:32
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
22.09.2018, 09:32
Помогаю со студенческими работами здесь

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

Условие для цикла С++
Доброго всем времени суток! Помогите пожалуйста человеку который только начал открывать для себя...

Условие для прекращения цикла
Имеется задача: Ввести двоичный код и перевести его в десятичный. Имеется подсказка для решения...

Условие для преждевременного выхода из цикла for
Помогите пожалуйста придумать условие для преждевременного выхода из цикла for. Нужно чтобы...


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

Или воспользуйтесь поиском по форуму:
12
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru