# array of series

• 06-21-2004
ronenk
array of series
I need to take as input positive integers 1-100. Each of those numbers will be the first element in series. The series will be formed by a specified formula, in case of pair integer- set 1 & case of uneven integer- set 2. Then of course print it.

I'm not quit sure about the syntax of this code & also compiler through me with many errors & warnings. Cannot seem to find why!

Code:

:

#include<stdio.h>
#define N 5
#define M 5
void seri(int A[][M],int *,int *);
int main ( void )
{
int A[N][M],*p,*n=0;
p=A;
printf ("\nenter numbers from 1 to 100\n");
scanf ("%d", p);
if(*p<1||*p>100)
{
puts(" Number is too big/ too small. Try again!");
}
else
{
while (*p!=-1)
{
for (p=A;p-A<M;p++)
{
puts ("next number:");
scanf ("%d", p++);
seri(A,n,p);
}
}

void seri(int A[N][M],int *n,int *p)
{
int t;
for (p=A;p-A>=1;p++)
{
if (*p%2==0)
*p= *p/2;
else
{
*p=3*(*p)+1;
}
n=p-A;
}

printf("n= %d. seri is :", n);

for (t=0;t<=n;t++)

printf("  %d\n", *p);

}

}

TIA

Ronen
• 06-21-2004
quzah
Why is it that whenever anyone says they get compiler errors and warnings, they never think to post them?

Well for starters, use [code] [/code] tags around any posted code. Had you actually taken the time to read the Announcements, you'd have known this already.

Next off, you have an unmatched number of { } pairs. Fix your indenting, and you'd have seen that.

Quzah.
• 06-21-2004
xErath
Geee!!! Do you know what a pointer is?!?! Or an array?
First error:
Code:

int A[N][M],*p,*n=0;
p=A;

The problem is you're assigning a double pointer (the two-dimension array A) to a single pointer (the var *p)
Do like this
Code:

int A[N][M],*p,*n=0;
int x=0, y=0;
p=&(A[x][y]);
//where x and y are the indexes of the number you want to edit

This goes on for the entire source.

Plus.. this is awfull: for (p=A;p-A<M;p++)
More, you don't use *n for nothing... But I'll keep it
In this assignment int *n=0, you saying that you have a pointer that point to memory adress 0, or in other word NULL. If you want to point something you must first allocate some memory to that pointer:
Code:

n=malloc(sizeof(int))
A detail: if you write int *n=0, your defining the variable value.
If you then write *n=0, after n being defined, then you're altering the pointed int.

Specify better want you want to do..
• 06-21-2004
xErath
Where's another one....
Code:

#include<stdio.h>
#define N 5
#define M 5

void seri(int A[N][M],int x);

int main(){
int A[N][M],*p, n=0;
int x = 0, y = 0;
p=&(A[x][y]);

printf ("\nenter numbers from 1 to 100\n");

while(x<N){
scanf("%d", &(A[x][0]));
if(A[x][0]<1||A[x][0]>100)
puts(" Number is too big/ too small. Try again!");
else{
seri(A,x);
x++;
if(x<N)        puts ("next number:");
}
}
}

void seri(int A[N][M],int x){
int i, n;

for(i=0;i<M-1;i++){
if (A[x][i]%2==0)
A[x][i+1]= A[x][i]/2;
else
A[x][i+1]=3*A[x][i]+1;
n=A[x][i+1]-A[x][0];
}

printf("n = %d. seri is :\n", n);
for(i=0;i<M;i++)
printf("\t%d\n", A[x][i]);
}

Is this the seri function you wanted??
• 06-22-2004
ronenk
Appologize for the uncomplete info regarding the drill:
the series needs to begin in the entered integer at the beginnig & end with 1. Delimeter for the end of input is -1.
like:
input - 10
output
10 5 16 8 4 2 1.

all input no. has to be entered together & all output data has to come out at the end as a bulk.

like:

10 5 16 8 4 2 1
11 34 17 51 26 13 40 20 10 5 16 8 4 2 1
.
.
.
& finaly n reperents the index of elements in each line. In other words: how many numbers in line.

hope I have cleared everything now...

TIA.
• 06-22-2004
ronenk

Code:

:

#include<stdio.h>
#define N 5
#define M 900

void seri(int A[N][M],int x,int y,int n);

int main()
{
int A[N][M],*p, n=0;
int x = 0, y = 0;
p=&(A[x][y]);

printf ("\nenter numbers from 1 to 100\n");

while(x<N)
{
scanf("%d", &(A[x][0]));
if(A[x][0]<1||A[x][0]>100)
puts(" Number is too big/ too small. Try again!");
else
{
seri(A,x,y,n);
x++;
if(x<N)        puts ("next number:");
}
}
}

void seri(int A[N][M],int x,int y,int n)
{

for(A[x][0];A[x][y]>1;y++)
{
if (A[x][y]%2==0)
A[x][y+1]= A[x][y]/2;
else
A[x][y+1]=3*A[x][y]+1;
n=y;
printf("\t%d\n", A[x][y]);
}

printf("n = %d. seri is :\n", n);

}

Now I miss
1. the 1 at the end. If I write:

Code:

for(A[x][0];A[x][y]=>1;y++)
I get compiler error:
error C2059: syntax error : '>'
error C2143: syntax error : missing ';' before ')'
error C2181: illegal else without matching if
error C2143: syntax error : missing ')' before 'string'
error C2143: syntax error : missing '{' before 'string'
error C2059: syntax error : '<Unknown>'
error C2059: syntax error : ')'
error C2059: syntax error : '}'

2. the bulk printing at output mentioned above.
• 06-22-2004
quzah
Switch them around. You don't put the equal sign first on the compound operators like that:
Code:

*=
/=
+=
-=
%=
|=
&=
~=
<<=
>>=
^=
!=
<=
>=

Quzah.
*Yeah, I know it's not there, but read the first sentence to figure out why I didn't list it.
**If you don't know what I'm talking about, ignore these.
***If you're really confused now close your browser.
• 06-22-2004
ronenk
tried this too before"

Code:

for(A[x][0];A[x][y]>=1;y++)

Then there is some kind of bug, or I dont know what... :confused:
I get very long list of:

enter numbers from 1 to 100
6

6
3
10
5
16
8
4
2
1
4
2
1
4
2
1
.
.

it is longer the array size, but with respect to it. For instance on a 2*3 array, I got ~44 lines. On larger arrays- more lines etc...
• 06-22-2004
Prelude
>for(A[x][0];A[x][y]>=1;y++)
This will loop until A[x][y] is 0. Your series isn't very good at getting that particular result. ;) Just use > and print the last number outside of the loop:
Code:

void seri(int A[N][M],int x,int y,int n)
{
for(;A[x][y]>1;y++)
{
if (A[x][y]%2==0)
A[x][y+1]= A[x][y]/2;
else
A[x][y+1]=3*A[x][y]+1;
n=y;
printf("\t%d\n", A[x][y]);
}
printf("\t%d\n", A[x][y]);
printf("n = %d. seri is :\n", n);
}

• 06-22-2004
ronenk
How about the "bulk" printing in output mentioned above?
• 06-22-2004
Prelude
>How about the "bulk" printing in output mentioned above?
Here's that feature along with a bit of cleaning up I added for fun:
Code:

#include <stdio.h>
#include <stdlib.h>

#define NSERIES    5
#define SERIES_LEN 900

int  in_range(int value, int low, int high);
void seri(int series[SERIES_LEN]);

int main(void)
{
int series_list[NSERIES][SERIES_LEN];
int x = 0;
int y;

while (x < NSERIES)
{
printf("Enter a number from 1 to 100: ");
fflush(stdout);
/* Always error check scanf */
if (scanf("%d", &series_list[x][0]) != 1)
{
fprintf(stderr, "Invalid number\n");
return EXIT_FAILURE;
}
if (!in_range(series_list[x][0], 1, 100))
fprintf(stderr, "Number is too big/small. Try again!\n");
else
seri(series_list[x++]);
}
/* Bulk print */
for (x = 0; x < NSERIES; x++)
{
for (y = 0; y < SERIES_LEN - 1 && series_list[x][y] > 1; y++)
printf("%-3d ", series_list[x][y]);
printf("%-3d ", series_list[x][y++]);
printf("\nn = %d\n", series_list[x][y]);
}

return EXIT_SUCCESS;
}

int in_range(int value, int low, int high)
{
return value >= low && value <= high;
}

void seri(int series[SERIES_LEN])
{
int y;
int n = 0;

/* Place n in the last spot */
for (y = 0; y < SERIES_LEN - 1 && series[y] > 1; y++)
{
if (series[y] % 2 == 0)
series[y + 1] = series[y] / 2;
else
series[y + 1] = 3 * series[y] + 1;
n = y;
}
series[++y] = n;
}

:)
• 06-22-2004
ronenk
Wow, cool!