Wan Ding Yao
Wan Ding Yao

Reputation: 5

C: Check if one element of an array equals another element

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

int main(void) {
float dlvelox;
float dlveloy;
float lvelox[1000] = {};
float lveloy[1000] = {};
float xcord[1000] = {};
float ycord[1000] = {};
float length;
float breadth;
int id;
int j;
int k;
int stepcount;
int step = 0;


/* Obtaining velocity */
{
    printf("Enter the initial h velocity of the ball:\n");
    scanf("%f", &dlvelox);
    printf("Enter the initial v velocity of the ball:\n");
    scanf("%f", &dlveloy);
}

for (int i = 0; i < 1000; i++)
    lvelox[i] = dlvelox;
for (int i = 0; i < 1000; i++)
    lveloy[i] = dlveloy;

/* Initializing box lock */
{
    printf("Enter the length of box:\n");
    scanf("%f", &length);
    printf("Enter the breadth of box:\n");
    scanf("%f", &breadth);
}

/* Obtain number of steps */
{
    printf("Enter the number of steps wanted:\n");
    scanf("%d", &stepcount);
}

/* Initial console display */
{
    printf("\n");
    printf("X-coordinate, Y-coordinate, Ball ID, Step\n");
    printf("\n");

}

/* Loop method */
while ( step < stepcount )
{    

    j = id;
    k = id;

    for(id = 0; id < 1000; id++)
    {
            lveloy[id] = lveloy[id] - 9.81;
            xcord[id] = xcord[id] + lvelox[id];
            ycord[id] = ycord[id] + lveloy[id];
            printf("%f, %f, %d, %d\n", xcord[id], ycord[id], id, step);

    if ( ycord[id] < 0 )
    {
            lveloy[id] = (lveloy[id] * -1);
            xcord[id] = xcord[id] + lvelox[id];
            ycord[id] = ycord[id] + lveloy[id];
            printf("%f, %f, %d, %d\n", xcord[id], ycord[id], id, step);
    }

    if ( ycord[id] > breadth )
    {
            lveloy[id] = (lveloy[id] * -1);
            xcord[id] = xcord[id] + lvelox[id];
            ycord[id] = ycord[id] + lveloy[id];
            printf("%f, %f, %d, %d\n", xcord[id], ycord[id], id, step);
    }

    if ( xcord[id] < 0 )
    {
            lvelox[id] = (lvelox[id] * -1);
            xcord[id] = xcord[id] + lvelox[id];
            ycord[id] = ycord[id] + lveloy[id];
            printf("%f, %f, %d, %d\n", xcord[id], ycord[id], id, step);
    }

    if ( xcord[id] > length )
    {
            lvelox[id] = (lvelox[id] * -1);
            xcord[id] = xcord[id] + lvelox[id];
            ycord[id] = ycord[id] + lveloy[id];
            printf("%f, %f, %d, %d\n", xcord[id], ycord[id], id, step);
    }

    if ( xcord[j] == xcord[k] )
    {
            lvelox[j] = (lvelox[j] * -1);
            xcord[j] = xcord[j] + lvelox[j];
            ycord[j] = ycord[j] + lveloy[j];
            printf("%f, %f, %d, %d\n", xcord[j], ycord[j], j, step);
            lvelox[k] = (lvelox[k] * -1);
            xcord[k] = xcord[k] + lvelox[k];
            ycord[k] = ycord[k] + lveloy[k];
            printf("%f, %f, %d, %d\n", xcord[k], ycord[k], k, step);
    }

    if ( ycord[j] == ycord[k] )
    {
            lvelox[j] = (lvelox[j] * -1);
            xcord[j] = xcord[j] + lvelox[j];
            ycord[j] = ycord[j] + lveloy[j];
            printf("%f, %f, %d, %d\n", xcord[j], ycord[j], j, step);
            lvelox[k] = (lvelox[k] * -1);
            xcord[k] = xcord[k] + lvelox[k];
            ycord[k] = ycord[k] + lveloy[k];
            printf("%f, %f, %d, %d\n", xcord[k], ycord[k], k, step);
    }

    if ( step == stepcount )
    {
            return 0;
    }

    }

    step = step + 1;

}
}

This program simulates 1000 particles colliding in a box of user-defined dimensions. This code doesn't seem to work. It produces random coordinates that are outside the dimension of the box, and also does not show the coordinates of all the particles. This only occurred after inserting the collision section of the code.

    j = id
    k = id
    if ( xcord[j] == xcord[k] )
    {
            lvelox[j] = (lvelox[j] * -1);
            xcord[j] = xcord[j] + lvelox[j];
            ycord[j] = ycord[j] + lveloy[j];
            printf("%f, %f, %d, %d\n", xcord[j], ycord[j], j, step);
            lvelox[k] = (lvelox[k] * -1);
            xcord[k] = xcord[k] + lvelox[k];
            ycord[k] = ycord[k] + lveloy[k];
            printf("%f, %f, %d, %d\n", xcord[k], ycord[k], k, step);
    }

    if ( ycord[j] == ycord[k] )
    {
            lvelox[j] = (lvelox[j] * -1);
            xcord[j] = xcord[j] + lvelox[j];
            ycord[j] = ycord[j] + lveloy[j];
            printf("%f, %f, %d, %d\n", xcord[j], ycord[j], j, step);
            lvelox[k] = (lvelox[k] * -1);
            xcord[k] = xcord[k] + lvelox[k];
            ycord[k] = ycord[k] + lveloy[k];
            printf("%f, %f, %d, %d\n", xcord[k], ycord[k], k, step);
    }

Upvotes: 0

Views: 168

Answers (3)

Rizstien
Rizstien

Reputation: 802

#include <stdio.h>

main()
{
   int xcord[] = {1, 2, 3, 5, 5, 6, 7};
   int arrlength= sizeof(xcord)/sizeof(xcord[0]);
   int i,j,tmp;
   for(i=0; i<arrlength; i++) {
       tmp = xcord[i];
       for (j=i+1; j<arrlength; j++) {
           if(xcord[i] == xcord[j]) {
               printf("same value %d \n",xcord[j]);
           }
       }
   }
}

Hope it will solve your problem.

Upvotes: 0

David Schwartz
David Schwartz

Reputation: 182743

It's not clear what you're trying to do, but this line doesn't make any sense at all:

   if ( xcord[id] = xcord[id = 0; id < 1000; id++] )

There is no C syntax that looks even remotely like that. This looks like half if and half for. Pick one or the other.

Upvotes: 1

wawek
wawek

Reputation: 1597

Ok you did something really strange. Read first about loops and then try again. What I mean is you have to use

for(id = 0; id < 1000; id++) {
   //your code here
}

Upvotes: 0

Related Questions