Премини към съдържанието
Форумът в приложение

По-лесно сърфиране. Научи повече.

Kaldata.com - Форуми

Приложение на форума на цял екран с push известия, значки и други.

За да инсталирате това приложение на iOS и iPadOS
  1. Докоснете Иконата за споделяне в Safari
  2. Превъртете менюто и докоснете Добавяне към началния екран.
  3. Докоснете Добавяне в горния десен ъгъл.
За да инсталирате това приложение на Android
  1. Докоснете менюто с 3 точки (⋮) в горния десен ъгъл на браузъра.
  2. Докоснете Добавяне към началния екран или Инсталиране на приложение.
  3. Потвърдете, като докоснете Инсталиране.

Добре дошли!

Добре дошли в нашите форуми, пълни с полезна информация. Имате проблем с компютъра или телефона си? Публикувайте нова тема и ще намерите решение на всичките си проблеми. Общувайте свободно и открийте безброй нови приятели.

Моля, регистрирайте се за да публикувате тема и да получите пълен достъп до всички функции.

 

Курсова работа на "C"

Featured Replies

Здравейте колеги. Имам курсова задача за изчисляване на следния израс 4*(n-4)! като n<13.

Проблема е че незнам какви неща да въведа и после какво да напиша ако n>13 .

#include<stdio.h>

#include<conio.h>

void main()

{

int a;

int fact(int n-4);

clrscr()

a=4;

printf("n=?\b");

scanf("%d",&n);

4*(n-4)!

if (n<13) printf("4*(n-4)!=%f\n"b);

незнам дали е така до тука немога да разбера как трябва да се сметне . Ще съм ви благодарен ако метнете някои жокерчета и да кажете как трябва да ги въведа ;) Благодаря ви !!!

1. За да пресметнеш fact(x), трябва да сам да напишеш функция за това, C няма вградена функция за това.

2. Предполагам разбираш защо n<=13, редицата fact(x), fact(x+1), fact(x+n) расте изключително бързо и при n==13, резултата прехвърля размера на стандартния целочислен тип в C. Нали в условието имаш n<13, ако искаш да реализираш алгоритъма, може да пазиш резултата в double променлива в повечето случай е 8bytes (64bit), което е едно голямо число, всъщност. Но най-добре поразгледай алгоритми за работа с "големи числа", пряко свързани със знакови масиви.

#include <stdio.h>

#include <conio.h>

#include <stdlib.h>


int fact(int input);


int main(void)

{

    int input;


    printf("Enter input: ");

    scanf("%d", &input);


    if(input<4) input=0; // Факториал е резултат от умножението на всички ПОЛОЖИТЕЛНИ цели числа, 

                         // по-малки от 'input' и >=0 (Ex: 3! = 3*2*1 = 6


    else if(input>13) exit(1); // изпълнява условието n<13, ако n>13 - затваря програмата


    unsigned rslt = fact(input-4); // пресмята (n-4)!


    printf("4*(%d-4)! = %d", input, 4*rslt);


    getch();

}


int fact(int input)

{

    unsigned fact = 1;


    if(input==1) return 1;


    else {


    while(input) {

       fact*=input;

       input--;

       }


    return fact;

   }

}

Това далеч не е от най-продуцивните решения, ако не ти е спешно, тези дни може да драсна нещо по-добро, но не обещавам нищо.

  • Автор

Благодаря ти много .Ще се постарая да я направя така , както ние ги пишеме .Защото не сме зели повечето от тези функций.

Ще помисля как да я оправя ,но иначе не е спещно може да изчакам ,но по такъв начин написана просто няма как да стане . Иначе много ти благодаря ...... за отделеното време.

#include <stdio.h>

#include <conio.h>


int fact(int input);


int main(void)

{

    int n;


    printf("Enter input: ");

    scanf("%d", &n);


    int rslt = fact(n-4); // пресмята (n-4)!


    printf("4*(%d-4)! = %d", n, 4*rslt);


    getch(); // четене на знак от stdin (входния поток) преди да затвори програмата

}


int fact(int input)

{

    int fact = 1;

    int i;


    if(input==1) return 1; // лека оптимизация


    else {

    for(i=1; i<=input; i++) {

      fact=fact*i;

  }


    return fact;


   }

}

Така става ли? Ако не, кажи какво по-конкретно не знаеш, та да мислим еквивалентни решения.

  • 3 седмици по-късно...
  • Автор

#include <stdio.h>

#include <conio.h>


int fact(int input);


int main(void)

{

    int n;


    printf("Enter input: ");

    scanf("%d", &n);


    int rslt = fact(n-4); // пресмята (n-4)!


    printf("4*(%d-4)! = %d", n, 4*rslt);


    getch(); // четене на знак от stdin (входния поток) преди да затвори програмата

}


int fact(int input)

{

    int fact = 1;

    int i;


    if(input==1) return 1; // лека оптимизация


    else {

    for(i=1; i<=input; i++) {

      fact=fact*i;

  }


    return fact;


   }

}

Така става ли? Ако не, кажи какво по-конкретно не знаеш, та да мислим еквивалентни решения.

еми мисля ,че така по добре ,но като я въведа програмата ми изписва че функцията трябва да връща резултата ......

  • Автор

еми мисля ,че така по добре ,но като я въведа програмата ми изписва че функцията трябва да връща резултата ......

Помогнете малко колеги, моля ви. Немога да разбера каде е грешката в програмата,за да не връща резултата .....

  • Автор

реализирах я програмката , много ти благодаря , но ще може ли малко да ми обясниш доло с оператора за организация на цикъла как стават нещата.....

разбирам я , но искам да ми я обясниш да ли не бъркам някаде.

реализирах я програмката , много ти благодаря , но ще може ли малко да ми обясниш доло с оператора за организация на цикъла как стават нещата.....

разбирам я , но искам да ми я обясниш да ли не бъркам някаде.

for(i=1; i<=input; i++) {

      fact=fact*i;

  }

Тоя цикъл всъщност ти решава факториала. Започва с i=1 и при всяко влизане в цикъла i нараства с 1, проверява условието да е по-малко или равно на input (числото чийто факториал искаш да изчислиш) и влиза в цикъла, ако условието е вярно. Във fact след завършване на цикъла ще имаш акумулиран резултата. Вместо 4!=4x3x2x1 (каквато е математическата дефиниция на факториала), тоя цикъл смята обратно 4!=1x2x3x4. Ако това питаш рабира се...

Редактирано от deyan4 (преглед на промените)

  • Автор

for(i=1; i<=input; i++) {

      fact=fact*i;

  }

Тоя цикъл всъщност ти решава факториала. Започва с i=1 и при всяко влизане в цикъла i нараства с 1, проверява условието да е по-малко или равно на input (числото чийто факториал искаш да изчислиш) и влиза в цикъла, ако условието е вярно. Във fact след завършване на цикъла ще имаш акумулиран резултата. Вместо 4!=4x3x2x1 (каквато е математическата дефиниция на факториала), тоя цикъл смята обратно 4!=1x2x3x4. Ако това питаш рабира се...

Да! Благодаря ти много :)

Регистрирайте се или влезете в профила си за да коментирате

Разглеждащи това в момента 0

  • Няма регистрирани потребители разглеждащи тази страница.

Дарение

  • Подкрепи съществуването на форума - направи дарение
    32%
    Дарени 315 € от нужните 1 000 €

Бюлетин

Получавайте известие, когато има важна промяна или новина свързана с форума.

Профил

Навигация

Търсене

Търсене

Конфигуриране на push известия в браузъра

Chrome (Android)
  1. Докоснете иконата на катинар до адресната лента.
  2. Докоснете Разрешения → Известия.
  3. Променете предпочитанията си.
Chrome (Desktop)
  1. Кликнете върху иконата на катинар в адресната лента.
  2. Изберете Настройки на сайта.
  3. Намерете Известия и коригирайте предпочитанията си.