Форум программистов, компьютерный форум, киберфорум
C для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.82/11: Рейтинг темы: голосов - 11, средняя оценка - 4.82
0 / 0 / 0
Регистрация: 28.02.2012
Сообщений: 54

Предусловие-цикл-постусловие

02.10.2012, 16:44. Показов 2342. Ответов 14
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Доброго времени суток.
Хочу обратиться к Вам за помощью.
Нужно решить задачу.

Дано Е
Нужно найти первое n при котором аn будет меньше Е по формуле an=1\n^2 (n - натуральное)

n вывести на экран.
С предусловием и постусловием.

Я пишу под Linux-ом и виндовые библиотеки не использую.

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
//То, что [S]получилось[/S]
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
 
void scan(float a, double n, float E)
{
    for (n; n<=100; n++)
    {
        if (E<=1)
        {
            a=1/(pow(n,2));
 
            return 1;
        }
        else
        {
            printf("Ответ: %f", &n);
        }
    }
 
}
 
int main()
{
    int n;
    float a,E;
 
    n=0;
 
    printf("Введите число E\n");
    scanf("%f",&E);
 
    if (E==0)
    {
        printf("Ответ: 0");
    }
    else
    {
        scan (a,n,E);
//        printf("Ответ: %f", &n-1);
    }
 
}
P.S. Пока знаю только два цикла и не знаю какой использовать...
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
02.10.2012, 16:44
Ответы с готовыми решениями:

Задача на Предусловие,постусловие
Здравствуйте! Сделал задачу,но не работает предусловие,помогите пожалуйста.... procedure TForm1.Button1Click(Sender:...

Переделать предусловие на постусловие
как переделать на постусловие? var i,w,k: integer; f: boolean; begin write('enter w: '); readln(w); k:=2; while...

Система уравнений с использованием операторов цикла (счётчк, предусловие, постусловие)
Здравствуйте. Нужно программно решить систему с использованием трёх видов операторов цикла (счётчик, постусловие, предусловие). + Блок...

14
 Аватар для doctor_lecter
284 / 157 / 30
Регистрация: 22.09.2012
Сообщений: 283
02.10.2012, 17:00
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
#include <stdio.h>
 
int main() {
    float a,e;
    scanf("%f", &e);
    int n=0;
    do {
        ++n;
        a=1/(float)(n*n);
    } while (a >= e);
    printf("%d\n", n);
    return 0;
}
0
0 / 0 / 0
Регистрация: 28.02.2012
Сообщений: 54
02.10.2012, 17:01  [ТС]
И так тоже не получилось (кажется проблема в цикле)

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
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
 
void scan(float a, double n, float E)
{
 
    do
{
    n++;
    a=1/(pow(n,2));
}
while(a<E);
 
printf("%f",&n);
 
  //for (n; n<=100; n++)
 
 
 
}
 
int main()
{
    int n;
    float a,E;
 
    n=0;
 
    printf("Введите число E\n");
    scanf("%f",&E);
 
    if (E==0)
    {
        printf("Ответ: 0");
    }
    else
    {
        scan (a,n,E);
//        printf("Ответ: %f", &n-1);
    }
 
}
0
 Аватар для doctor_lecter
284 / 157 / 30
Регистрация: 22.09.2012
Сообщений: 283
02.10.2012, 17:05
у вас while(a<E); а должно быть while(a>=E);
0
0 / 0 / 0
Регистрация: 28.02.2012
Сообщений: 54
02.10.2012, 17:06  [ТС]
Цитата Сообщение от doctor_lecter Посмотреть сообщение
у вас while(a<E); а должно быть while(a>=E);
и в функцию scan n нужно передавать по ссылке
Выход нужен когда Аn меньше E
0
 Аватар для doctor_lecter
284 / 157 / 30
Регистрация: 22.09.2012
Сообщений: 283
02.10.2012, 17:09
Tuxoid,
Цитата Сообщение от Tuxoid Посмотреть сообщение
Выход нужен когда Аn меньше E
А цикл будет выполняться пока условие истинно, поэтому когда условие a>=E будет ложно, a будет меньше e и цикл завершиться
0
0 / 0 / 0
Регистрация: 28.02.2012
Сообщений: 54
02.10.2012, 17:19  [ТС]
Что-то не правильно у меня получается(
Опять вернулись нули(

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
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
 
void scan(float a, double n, float E)
{
 
    do
    {
        a=1/(float)(n*n);
        ++n;
    }
     while (a >= E);
   // printf("%d\n", n);
    return 1;
}
 
 
 
int main()
{
    int n;
    float a,E;
 
    n=0;
 
    printf("Введите число E\n");
    scanf("%f",&E);
 
    if (E==0)
    {
        printf("Ответ: 0");
    }
    else
    {
        scan (a,n,E);
        printf("Ответ: %f", n);
    }
 
}
0
 Аватар для doctor_lecter
284 / 157 / 30
Регистрация: 22.09.2012
Сообщений: 283
02.10.2012, 17:28
тогда в функцию scan нужно передавать адрес n. И a можно не передавать.
C
1
2
3
4
5
6
7
8
9
10
void scan(int* n, float E)
{
     float a = 0.0f;
    do
    {
        a=1/(float)((*n)*(*n));
        ++(*n);
    }
     while (a >= E);
}
и вызывать scan(&n, E);
0
0 / 0 / 0
Регистрация: 28.02.2012
Сообщений: 54
02.10.2012, 17:36  [ТС]
Возвращается 0...
Хотя при Е=0.114 должен возвращаться 3
0
Модератор
Эксперт PythonЭксперт JavaЭксперт CЭксперт С++
 Аватар для easybudda
12843 / 7592 / 1766
Регистрация: 25.07.2009
Сообщений: 13,973
02.10.2012, 17:45
По-моему не тот случай, чтобы с циклами морочиться, тут проще всё:
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#include <stdio.h>
#include <math.h>
 
unsigned func(double e) {
    double ret = sqrt(1.0 / e);
    double n = ceil(ret);
    
    return (unsigned)n + ( n == ret );
}
 
int main(void) {
    double e;
    
    while ( printf("E = ") && scanf("%lf", &e) == 1 && e > 0.0 )
        printf("N = %u\n", func(e));
    
    return 0;
}
0
0 / 0 / 0
Регистрация: 28.02.2012
Сообщений: 54
02.10.2012, 17:48  [ТС]
Цитата Сообщение от easybudda Посмотреть сообщение
По-моему не тот случай, чтобы с циклами морочиться[/C]
У меня по заданию должен быть цикл(
0
 Аватар для doctor_lecter
284 / 157 / 30
Регистрация: 22.09.2012
Сообщений: 283
02.10.2012, 17:50
Покажите код


у меня так работает
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
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
 
void scan(int* n, float E)
{
     float a = 0.0f;
    do
    {
        ++(*n);
        a=1/(float)((*n)*(*n));
    }
     while (a >= E);
}
 
 
 
int main()
{
    int n;
    float a,E;
 
    n=0;
 
    printf("Введите число E\n");
    scanf("%f",&E);
 
    if (E==0)
    {
        printf("Ответ: 0");
    }
    else
    {
        scan(&n,E);
        printf("Ответ: %d\n", n);
    }
 
}
1
0 / 0 / 0
Регистрация: 28.02.2012
Сообщений: 54
02.10.2012, 17:52  [ТС]
Цитата Сообщение от doctor_lecter Посмотреть сообщение
Покажите код
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
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
 
void scan(int* n, float E)
{
    float a = 0.0f;
    do
    {
        a=1/(float)((*n)*(*n));
        ++(*n);
    }
    while (a >= E);
}
 
 
 
int main()
{
    int n;
    float a,E;
 
    n=1;
 
    printf("Введите число E\n");
    scanf("%f",&E);
 
    if (E==0)
    {
        printf("Ответ: 0");
    }
    else
    {
        scan (&n,E);
        printf("Ответ: %f", n);
    }
 
}
0
 Аватар для doctor_lecter
284 / 157 / 30
Регистрация: 22.09.2012
Сообщений: 283
02.10.2012, 17:57
В предыдущем сообщении написал свой код.
У вас выводит ноль, потому n имеет тип int а выводится как float.
1
0 / 0 / 0
Регистрация: 28.02.2012
Сообщений: 54
03.10.2012, 18:08  [ТС]
doctor_lecter, благодарю!
Работает.
Доработаю (когда Е>1) и скину код в общее пользование

Добавлено через 23 часа 59 минут
Вариант с защитой от чисел больше единицы

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
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
 
void scan(int* n, float E)
{
    float a = 0.0f;
 
    if (E<=1)
    {
        do
        {
            a=1/(float)((*n)*(*n));
            ++(*n);
        }
        while (a >= E);
    }
    else
    {
        printf("Вы ввели неверное число \n");
        exit(EOF);
        return 0;
    }
}
 
 
 
int main()
{
    int n;
    float E;
 
    n=0;
 
    printf("Введите число меньше единицы E\n");
    scanf("%f",&E);
 
    if (E==0)
    {
        printf("Ответ: 0");
    }
    else
    {
        scan (&n,E);
        printf("Ответ: %d\n", n-1);
    }
 
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
03.10.2012, 18:08
Помогаю со студенческими работами здесь

Найдите пару значений, при которых предусловие выполняется, а постусловие — нет
int area(int length, int width) // Вычисляет площадь прямоугольника; // предусловия: аргументы length и width являются положительными ...

Цикл с предусловие
С помощью while Найти все числа кратные пяти для чисел от 1 до N.

Предусловие while
Написать программу для вычисления f(x)=1/x^2 при x=1,2..,10 с использованием цикла с предусловием

Отрицательное предусловие в while
Всем привет.Не выходит заставить работать цикл с таким предусловием. $i=0; while($i++&lt;8){ if($i!=3){continue;} .... } Т.е....

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


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

Или воспользуйтесь поиском по форуму:
15
Ответ Создать тему
Новые блоги и статьи
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip На первой гифке отладочные линии отключены, а на второй включены:. . .
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip Сканируйте QR-код на мобильном и вы увидите, что появится джойстик для управления главным героем. . . .
Реалии
Hrethgir 01.03.2026
Нет, я не закончил до сих пор симулятор. Эта задача сложнее. Не получилось уйти в плавсостав, но оно и к лучшему, возможно. Точнее получалось - но сварщиком в палубную команду, а это значит, в моём. . .
Ритм жизни
kumehtar 27.02.2026
Иногда приходится жить в ритме, где дел становится всё больше, а вовлечения в происходящее — всё меньше. Плотный график не даёт вниманию закрепиться ни на одном событии. Утро начинается с быстрых,. . .
SDL3 для Web (WebAssembly): Сборка библиотек: SDL3, Box2D, FreeType, SDL3_ttf, SDL3_mixer и SDL3_image из исходников с помощью CMake и Emscripten
8Observer8 27.02.2026
Недавно вышла версия 3. 4. 2 библиотеки SDL3. На странице официальной релиза доступны исходники, готовые DLL (для x86, x64, arm64), а также библиотеки для разработки под Android, MinGW и Visual Studio. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru