/* shift.c -- It reads a sequence of positive integers. It stores it
* in an array, then it prompts the user to enter an
* integer, and then rotates clockwise the content of the
* array a corresponding number of positions. The contents
* the array are printed out whenever it changes.
* For example, if the sequence was
* 1,2,3,4,5
* and the number 3 is entered, the array becomes
* 3,4,5,1,2
* and if the number 11 is now entered, the array becomes
* 2,3,4,5,1
* and if the number -4 is now entered, the array becomes
* 1,2,3,4,5
*/
#include <stdio.h>
#define MAXN 8
/* It prints the current content on the array a with n elements */
void printarray(int a[], int n);
/* I will assume first that I have a number of functions then I will
* write them.
*/
/* Given an array a with n values, shift rotates
* its content m positions, clockwise.
*/
void shift(int a[], int n, int m);
/* getint prompts the user to enter a positive integer and returns
* its value.
*/
int getint(void);
/* It requests the user to enter positive integers and stores
* them in a. It returns in n the number of integers stored
* in the array.
*/
void getarray(int a[], int *n);
int main(void) {
int table[MAXN]; /* array where we store the sequence */
int howmany=0; /* number of elements in sequence */
int amount; /* amount of shift */
getarray(table, &howmany);
if (howmany==0) {
printf("Sorry, you entered the null sequence. Good bye.\n");
}else {
do {
printarray(table,howmany);
printf("By how much do you want to shift[0 to terminate]? ");
scanf("%d",&amount);
if (amount!=0)
shift(table,howmany,amount);
}while(amount!=0);
}
}
/* Given an array a with n values, shift rotates
* its content m positions, clockwise.
*/
void shift(int a[], int n, int m){
int temp[MAXN];
int lcv;
if (m<0)
m = n-(abs(m)%n);
for (lcv=0;lcv<n;lcv++)
temp[(lcv+m)%n] = a[lcv];
for (lcv=0; lcv<n;lcv++)
a[lcv]=temp[lcv];
}
/* getint prompts the user to enter a positive integer and returns
* its value.
*/
int getint(void){
int answer;
printf("Please enter a positive integer [<=0 to terminate] : ");
scanf("%d", &answer);
return answer;
}
/* It requests the user to enter positive integers and stores
* them in a. It returns in n the number of integers stored
* in the array.
*/
void getarray(int a[], int *n) {
int answer;
int i=0;
do {
answer = getint();
if (answer>0 && (i<MAXN))
a[i++]=answer;
}while(answer>0 && (i<MAXN));
*n = i;
}
/* It prints the current content of the array a with n elements */
void printarray(int a[], int n) {
int lcv;
for (lcv=0;lcv<n;lcv++){
printf(" %d",a[lcv]);
}
printf("\n");
}
0 comments:
Post a Comment