// Fibonacci sequence // Number in series interactively or via command line argument // fibonacci_series.cpp // RJM Programming - December, 2022 #include #include #include char aline[500]; int done=0; int last=-1; char oneline[500]; char lblanks[500]; //int nums[]={0,1}; int lastf=0; int lastlastf=0; int countFibonacci(int i) { // Recursive function int fibonacci; if (i == 0) { return 0; } else if (i == 1) { if (done == 0) { done=1; sprintf((aline + strlen(aline)), "1%s", " "); } return 1; } fibonacci = countFibonacci(i-1) + countFibonacci(i-2); if (fibonacci > last) { strcpy(aline, lblanks); strcat(aline, oneline); //sprintf((aline + strlen(aline)), "%d%s", fibonacci, ", "); sprintf((aline + strlen(aline)), "%d%s", fibonacci, " "); //nums[1]=fibonacci; } last=fibonacci; return fibonacci; } int main(int argc, char *args[]) { char delim[3]=", "; char explanation[5000]; int nsize = 0, fibonacci, i, j, k; char catend[20]; // Check for argument 1 number in series if (argc > 1) { for(i=0; i= '0' && args[1][i] <= '9')) { nsize = nsize; } else if (args[0][i] != '-') { nsize--; } } if (nsize == 0) sscanf(args[1], "%d", &nsize); } strcpy(explanation, "\n\n"); strcpy(aline, "0, "); oneline[0]=0; lblanks[0]=0; if (argc <= 1) { //nsize <= 0) { //printf("How many numbers are there in your fibonacci sequence (-ve for in a row): "); printf("How many numbers are there in your fibonacci sequence: "); scanf(" %d", &nsize); } //if (nsize > 0) { strcpy(delim, "\n\0"); } for (i=-5; i<=(int) abs(nsize * 3); i++) { sprintf((lblanks + strlen(lblanks)), "%s", " "); } k=strlen(lblanks); strcpy(aline, lblanks); strcat(aline, "0, "); for (i=0; i<=(int) abs(nsize); i++) { fibonacci = countFibonacci(i); if (i == (int) abs(nsize)) { printf("%d", fibonacci); sprintf((oneline + strlen(oneline)), "%d%s", fibonacci, "\0"); if (strstr(aline, "1")) { if (lastf != 0) { sprintf(catend, "%d%s%d%s%d%s", lastlastf, " + ", lastf, " = ", fibonacci, "\n"); } else { sprintf(catend, "%d%s%d%s%d%s", lastlastf, " + ", 1, " = ", fibonacci, "\n"); } strcat(explanation, strcat(strcat(aline, "\n "), catend)); } //oneline[0]=0; aline[0]=0; k-=2; sprintf(lblanks, "%s", "\0"); for (j=0; j