2010-12-09 3 views
1

Итак, у меня есть входной файл. Он состоит из 40 номеров. Первые 20 чисел вводятся в массив (я проверил это, они на самом деле там). Затем я закрываю и повторно открываю входной файл. Я сравниваю первые 20 чисел во входном файле с массивом, используя последовательный поиск. Это означает, что все они должны быть успешными. Затем я сравниваю следующие 20 чисел с числами в моем массиве, все они должны быть безуспешными. На данный момент мой массив не сортирован.C++ Последовательный поиск не находит последний элемент

Проблема, с которой я сталкиваюсь, заключается в том, что последнее число для успешного никогда не встречается с использованием последовательных. Я не знаю, как это исправить.

Вот последовательная функция поиска:

length = 19; 

void Search::sequential(ItemType item, bool& found) 
{ 
    int place = 0; 
    while (place < length && item != list[place]) 
    place++; 
    found = (place < length); 
} 

А вот мои удачные/неудачные циклы

outFile << "\n\n ************Sequential Successful ********** \n"; 
outFile << endl << "ID" << endl; 

inFile >> num; 
for(int i=0; i<=length && inFile; i++) 
{ 
    search.sequential(num, found); 
    if (found) 
    outFile << num << endl; 

    inFile >> num; 
} 


//sequential unsuccessful 
outFile << "\n\n ************Sequential unsuccessful ********** \n"; 
outFile << endl << "ID" << endl; 

for(int i=0; i<=length && inFile; i++) 
{ 
    search.sequential(num, found); 
    if (!found) 
    outFile << num << endl; 

    inFile >> num; 
} 

Однако мой результат:

************Sequential Successful ********** 

ID 
1111 
3352 
4567 
5678 
6789 
7890 
8901 
9012 
1223 
2113 
8546 
2374 
4723 
9573 
3284 
7474 
8594 
3589 
5858 
//THERE SHOULD BE 1925 HERE BUT THERE ISN'T 

    ************Sequential unsuccessful ********** 

ID 
9456 
3584 
2222 
4319 
4477 
5710 
5497 
1502 
1599 
1504 
1506 
9943 
8833 
9944 
6678 
5555 
5660 
9911 
6130 
1613 

Если я удалить «if (found)» заявляет, что все работает отлично, но как мне обойти это без его удаления?

Заранее спасибо

--------------- редактировать ---------------

Хорошо, когда я изменилась длина до 20, она все еще не работает. Я так потерялся.

Вот где я создать массив

inFile >> num; 
for (int i=0; i<length && inFile; i++) 
{ 
    search.addToList(num); 
    inFile >> num; 
} 

и здесь функция addToList

void Search::addToList(ItemType num) 
{ 
    if (index < length) //ive tried taking out this statement just to see if it makes a difference and it didn't 
    { 
    list[index] = num; 
    index++; 
    } 
} 

инициализирую индекс 0 в конструкторе

Это, как я объявляю массив

ItemType list[length]; 

ЭТО РАБОТАЕТ !!!! Большое спасибо всем вам! Я очень ценю это.

+1

Вы напечатаете Вам массив неверно: в его текущей форме вы печатаете элементы за фактический конец массива. Обычно я использую `for (int i = 0; i Lars 2010-12-09 16:42:58

+0

Да, это показывает, что мой массив держит правильные значения, спасибо. – 2010-12-09 16:55:24

ответ

3

Есть 2 решения: длина должна получить 20 в качестве значения

length = 20; 

или использования "< =" вместо "<" (в данном случае "длиной" должен быть назван "LastIndex")

void Search::sequential(ItemType item, bool& found) 
{ 
    int index = 0; 
    while (index <= length && item != list[index]) 
    index++; 
    found = (index <= length); 
} 
0

Посмотрите на свою функцию поиска, какое значение будет указывать индекс при попытке найти 20-й номер?

0

Если у вас 20 номеров, то почему вы установили длину до 19? Это очень противоречиво.

0

Классический вопрос по-одному. См. Ответ Кипотлова для исправления кода.

0

INDEX SEQUENTIAL ПОИСК ИСПОЛЬЗОВАНИЕ C

этот код работает для всех случаев, то есть, если мы находим последний элемент в массиве этого код будет работать ...

#include<stdio.h> 
void main() 
{ 
    int d[100],kin[20],pin[20],temp,k,i,j=0,n,n1=0,start,end; 
    printf("Enter the number of elements:"); 
    scanf("%d",&n); 
    for(i=0;i<n;i++) 
    scanf("%d",&d[i]); 
    printf("Enter the number to be searched:"); 
    scanf("%d",&k); 
    for(i=0;i<n;i+=3) 
    { 
    kin[n1]=d[i]; 
    pin[n1]=i; 
    n1++; 
    } 
    if(k < kin[0]) 
    { 
    printf("element not found"); 
    exit(0); 
    } 
    else 
    { 
    for(i=1;i<=n1;i++) 
     if(k < kin[i]) 
     { 
     start=pin[i-1]; 
     end=pin[i]; 
     break; 
     } 
     else 
     { 
     start=n1; 
     end=n-1; 
     } 
    } 
    for(i=start;i<=end;i++) 
    { 
    if(k==d[i]) 
    { 
     j=1; 
     break; 
    } 
    } 
    if(j==1) 
    printf("element found at position %d",i); 
    else 
    printf("element not found"); 
} 

 Смежные вопросы

  • Нет связанных вопросов^_^