我如何创造一个" twirly"在C程序任务?

时间:2015-04-07 08:57:32

标签: c function factors perfect-numbers

嘿伙计们我用C创建了一个程序来测试1到10000之间的所有数字,以检查它们是否完美,使用的函数可以确定数字是否完美。一旦找到它们就会将它们打印给用户,它们分别为6,28,496和8128.然后,程序会将每个完美数字的所有因子打印出来给用户。这一切都很好。这是我的问题。

我的任务的最后一部分要求我:

"使用" twirly"表明你的程序正在愉快地工作。 A" twirly"是按以下顺序打印在彼此顶部的以下字符:' |' ' /' ' - ' ' \&#39 ;.这具有产生纺车轮的效果 - 即“旋转”#34;。提示:为此,您可以在printf中使用\ r(而不是\ n)来仅提供回车符(而不是回车换行符)。 (注意:这可能不适用于某些系统 - 您不必这样做。)"

我不知道什么是twirly或如何实现一个。我的导师说它与睡眠和延迟功能有关,我也不知道如何使用。任何人都可以帮助我完成最后一个阶段,它很糟糕我的所有编码都已完成,但我无法得到这个" twirly"工作的事情。

4 个答案:

答案 0 :(得分:0)

如果你想同时执行

的任务
  1. 测试数字和
  2. 在屏幕上显示twirly

    当进程继续时,你最好考虑使用线程。使用POSIX线程,你可以在一个线程上启动任务,另一个线程将在终端上向用户显示twirly。

  3. #include<stdlib.h>
    
    #include<pthread.h>
    
    int Test();
    
    void Display();
    
    int main(){
    // create threads each for both tasks test and Display
    //call threads
    //wait for Test thread to finish
    //terminate display thread after Test  thread completes
    //exit code
    }
    

    有关线程,请参阅第12章 beginning linux programming ebook

答案 1 :(得分:0)

您可以使用“睡眠”功能来延迟程序的操作。请注意,这可能不适用于某些系统。

#include <stdio.h>

// to use "Sleep" function on Windows OS
#include <Windows.h>

void loadingAnimation(int);

int main() {
    while (true) {
        // replace this "Hello World!" with your code
        printf("Hello World!\n");

        loadingAnimation(50);
    }
}

void loadingAnimation(int speed) {
    printf("|");
    Sleep(speed);
    printf("\r/");
    Sleep(speed);
    printf("\r-");
    Sleep(speed);
    printf("\r\\");
    Sleep(speed);
    printf("\r");
}

如果上面的“睡眠”功能不起作用,请尝试以下操作:

#include<stdio.h>
#include<dos.h>

main()
{
   printf("Wait for 5 seconds to exit.\n");
   sleep(5);
   return 0;
}

参考:Using "dos.h"

或试试这个:Using "unistd.h"

答案 2 :(得分:0)

鉴于用户正在“等待”的程序,我认为所述的问题以及使用ContentProvider或线程的解决方案都是错误的。

在现代个人计算机上使用 C 生成10,000以下的所有完美数字需要大约1/10秒。因此,任何显示计算机的设备“快乐地工作”都将永远不会被看到,或者会显着地干扰完成工作所需的时间。

但是,无论如何,让我们做一个完美的数字搜索工作。我没有打印出因素来保持这个简单。由于10,000太低而无法看到twirly行动,我已将限制提高到100,000:

sleep()

不需要#include <stdio.h> #include <string.h> int main() { const char *twirly = "|/-\\"; for (unsigned x = 1; x <= 100000; x++) { unsigned sum = 0; for (unsigned i = 1; i <= x / 2; i++) { if (x % i == 0) { sum += i; } } if (sum == x) { printf("%d\n", x); } printf("%c\r", twirly[x / 2500 % strlen(twirly)]); } return 0; } 或线程,只需将其置于问题本身的复杂性中,并以合理的时间间隔进行更新。

现在这里有了捕捉,虽然上面的工作,但用户永远不会看到第五个完美的数字弹出100,000限制,甚至有100,000,000限制,这应该产生一个,他们可能会放弃,因为这是找到它们的坏(慢)算法。但是他们会有一个值得关注的东西。

答案 3 :(得分:-1)

i as integer  
loop i: 1 to 10000   
     loop j: 1 to i/2    
          sum as integer   
          set sum = 0  
          if i%j == 0  
               sum+=j  
          return sum==i  
     if i%100 == 0  
          str as character pointer  
          set *str = "|/-\\"  
          set length = 4  
          print str[p] using "%c\r" as format specifier   
          Increment p and assign its modulo by len to p