473,505 Members | 15,976 Online
Bytes | Software Development & Data Engineering Community
+ Post

Home Posts Topics Members FAQ

Problems with a simple linear search

I have an issue with a simple function that has to make a linear search
for a key into an array.

If the key is found in the array, the function it has to return 1 to the
caller and pass array index through a out parameter.

The issue is that the out parameter is not being updated.

If I return the position to the caller (instead to use a out parameter)
all is ok.

But I would to use a boolean (1 or 0) value as return value to the
caller: 1 stays for found, 0 stays for not found.

Thanks in advance and apologies for my bad english.

Here it is my piece of code.

/*** Code starts here ***/

/* Search for number 'x' in array v[] */
/* If 'x' found pass array position through 'pos' parameter */
/* and returns 1 to caller; else returns 0 */

int linsearch (int v[], int nmax, int x, int pos)
{

int i;

for (i=0; i<nmax; i++)
{
if(v[i]==x)
{
pos=i; /* pass the index where found */
return 1; /* returns 1 (found) */
}
}

return 0; /* Exit from for...so returns 0 */
}

int main (void)
{
int myvet[] = {5,4,3,2,1};

int key = 2; /* Number to find */

int index=0; /* Actual parameter that holds index of element */

if(linsearch(myvet, 5, 2, index))
printf ("\nNumber %d found at position %d ", key, index);
else
printf ("\nNumber %d not found", key);

return 0;
}

/*** Code ends here ***/

Jun 27 '08 #1
3 1835
nembo kid wrote:
I have an issue with a simple function that has to make a linear
search for a key into an array.

If the key is found in the array, the function it has to return 1 to
the caller and pass array index through a out parameter.

The issue is that the out parameter is not being updated.

If I return the position to the caller (instead to use a out
parameter) all is ok.

But I would to use a boolean (1 or 0) value as return value to the
caller: 1 stays for found, 0 stays for not found.

Thanks in advance and apologies for my bad english.

Here it is my piece of code.

/*** Code starts here ***/

/* Search for number 'x' in array v[] */
/* If 'x' found pass array position through 'pos' parameter */
/* and returns 1 to caller; else returns 0 */

int linsearch (int v[], int nmax, int x, int pos)
pos is being passed by value. A copy of it is made and passed into the
function. pos becomes a local variable here, only visible during the
lifetime of the function. Any changes to this local pos will never be seen
by the caller.
{

int i;

for (i=0; i<nmax; i++)
{
if(v[i]==x)
{
pos=i; /* pass the index where found */
This only changes the local copy of pos, the local variable. The local
variable pos disappears when this function is returned (the next line).
return 1; /* returns 1 (found) */
}
}

return 0; /* Exit from for...so returns 0 */
}

int main (void)
{
int myvet[] = {5,4,3,2,1};

int key = 2; /* Number to find */

int index=0; /* Actual parameter that holds index of element */

if(linsearch(myvet, 5, 2, index))
index is passed by value. The contents of index (0) is copied and passed to
the function.
printf ("\nNumber %d found at position %d ", key, index);
else
printf ("\nNumber %d not found", key);

return 0;
}

/*** Code ends here ***/
Okay, so the question is, how to fix this? You need to pass a pointer to
the function you wish to change. Change the signature of linsearch to:
int linsearch (int v[], int nmax, int x, int* pos)
now pos is a pointer to an integer. Since you want to change what the
pointer points to, not the pointer itself, you need a level of indirection.
*pos=i; /* pass the index where found */

* used in this method is to dereference the pointer. Basically saying,
"what pos points to".

One other change is needed when you call linsearch. Instead of passing the
variable, you need to pass a pointer to the variable:
if(linsearch(myvet, 5, 2, &index))

& used this way is "adress off" basically saying, "pass the address of
index".

--
Jim Langston
ta*******@rocketmail.com
Jun 27 '08 #2
nembo kid wrote:
I have an issue with a simple function that has to make a linear search
for a key into an array.

If the key is found in the array, the function it has to return 1 to the
caller and pass array index through a out parameter.

The issue is that the out parameter is not being updated.

If I return the position to the caller (instead to use a out parameter)
all is ok.
[...]
This is Question 4.8 in the comp.lang.c Frequently
Asked Questions (FAQ) list, <http://www.c-faq.com/>. The
question's title in the FAQ doesn't seem at first blush to
have much to do with your problem, but trust me and read on.

--
Eric Sosman
es*****@ieee-dot-org.invalid
Jun 27 '08 #3
Jim Langston ha scritto:
& used this way is "adress off" basically saying, "pass the address of
index".
Very clear. I fix it by using a pointer.
Thanks again to others too.

Jun 27 '08 #4

This thread has been closed and replies have been disabled. Please start a new discussion.

Similar topics

8
3080
by: kaeli | last post by:
I have had a little free time lately to revisit a problem I have with the 3 column layout plus a header and footer. See this example: http://glish.com/css/7.asp There is a header and 3...
6
7091
by: Andy | last post by:
Hello, I am having many problems with setting up a parameter query that searches by the criteria entered or returns all records if nothing is entered. I have designed an unbound form with 3...
7
5432
by: Timo Haberkern | last post by:
Hi there, i have some troubles with my TSearch2 Installation. I have done this installation as described in http://www.sai.msu.su/~megera/oddmuse/index.cgi/Tsearch_V2_compound_words...
2
3935
by: littlegirl | last post by:
hi guys can some one help me here i have to accept a number and preform a linear search for the numbers and if its not one of the number it has to say its invalid #include <iostream> using...
13
4310
by: Massimo Fabbri | last post by:
Maybe it's a little OT, but I'll give it try anyway.... I was asked to maintain and further develop an already existing small company's web site. I know the golden rule of "eternal" URIs, but...
3
10447
by: ntuyen01 | last post by:
Hi All, Does anyone has examples for Linear Regression formula using c#. Or any good third party software create this. Thanks in advance Regards, Ted
1
1656
by: geebanga88 | last post by:
HI i have a method that performs a linear search to find a given vowel. The vowel parameter is a given vowel, while vowel is the array with all the vowels. public static void...
3
5991
by: jivelasquezt | last post by:
Hi all, I'm new to this group so I don't know if this question has been posted before, but does anyone knows about linear/integer programming routines in Python that are available on the web,...
55
6401
by: copx | last post by:
Can anyone point me to a simple, fast RRNG function to generate random ints within a specified range? It is important that each value within the range has the same probability (uniform...
0
7218
marktang
by: marktang | last post by:
ONU (Optical Network Unit) is one of the key components for providing high-speed Internet services. Its primary function is to act as an endpoint device located at the user's premises. However,...
0
7103
by: Hystou | last post by:
Most computers default to English, but sometimes we require a different language, especially when relocating. Forgot to request a specific language before your computer shipped? No problem! You can...
0
7307
Oralloy
by: Oralloy | last post by:
Hello folks, I am unable to find appropriate documentation on the type promotion of bit-fields when using the generalised comparison operator "<=>". The problem is that using the GNU compilers,...
0
7370
jinu1996
by: jinu1996 | last post by:
In today's digital age, having a compelling online presence is paramount for businesses aiming to thrive in a competitive landscape. At the heart of this digital strategy lies an intricately woven...
0
7478
tracyyun
by: tracyyun | last post by:
Dear forum friends, With the development of smart home technology, a variety of wireless communication protocols have appeared on the market, such as Zigbee, Z-Wave, Wi-Fi, Bluetooth, etc. Each...
1
5035
isladogs
by: isladogs | last post by:
The next Access Europe User Group meeting will be on Wednesday 1 May 2024 starting at 18:00 UK time (6PM UTC+1) and finishing by 19:30 (7.30PM). In this session, we are pleased to welcome a new...
0
4701
by: conductexam | last post by:
I have .net C# application in which I am extracting data from word file and save it in database particularly. To store word all data as it is I am converting the whole word file firstly in HTML and...
0
3188
by: TSSRALBI | last post by:
Hello I'm a network technician in training and I need your help. I am currently learning how to create and manage the different types of VPNs and I have a question about LAN-to-LAN VPNs. The...
0
3177
by: adsilva | last post by:
A Windows Forms form does not have the event Unload, like VB6. What one acts like?

By using Bytes.com and it's services, you agree to our Privacy Policy and Terms of Use.

To disable or enable advertisements and analytics tracking please visit the manage ads & tracking page.