-
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!
Please review it and have your notes.
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
-
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.
-
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..
-
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??
-
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.
-
what do you think about this one?
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.
-
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.
-
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...
-
>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);
}
-
How about the "bulk" printing in output mentioned above?
-
>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;
}
:)
-