Подсчет количества поисков - PullRequest
1 голос
/ 04 мая 2010

Я обновил свой main и sequetialSearch, и теперь он вылетает при запуске. Хорошо компилируется, но затем вылетает.

main.c

#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <stdbool.h>
#include "percentage.h"
#include "sequentialSearch.h"

#define searchAmount 100

int main(int argc, char *argv[])
{
  int numbers[100];
  int searches[searchAmount];
  int testAmounts[searchAmount];
  int i;
  int where;
  int searchSuccess;
  int searchUnsuccess;
  int percent;
  int looker;
  int sum;
  int average;

  srand(time(NULL));
  for (i = 0; i < 100; i++){
      numbers[i] = rand() % 200;
  }
  for (i = 0; i < searchAmount; i++){
      searches[i] = rand() % 200;
  }

  searchUnsuccess = 0;
  searchSuccess = 0;
  sum = 0;

  for(i = 0; i < searchAmount; i++){
        if(seqSearch(numbers, 100, searches[i], &where, &looker)){
              searchSuccess++;
              testAmounts[i] = looker;

        }else{
              searchUnsuccess++;
              testAmounts[i] = looker;
        }
  }
  for(i = 0; i < searchAmount; i++){
        sum = sum + testAmounts[i];
  }

  average = sum / searchAmount;

  percent = percentRate(searchSuccess, searchAmount);
  printf("Total number of searches: %d\n", searchAmount);
  printf("Total successful searches: %d\n", searchSuccess);
  printf("Success Rate: %d%%\n", percent);
  printf("Total number of tests ran: %d\n", average);
  system("PAUSE");  
  return 0;
}

sequentialSearch.h

bool seqSearch (int list[], int last, int target, int* locn, int* looker){

     *looker = 0;
     while(*looker < last && target != list[*looker]){
                  *looker++;
     }

     *locn = *looker;
     return(target == list[*looker]);
}

Ответы [ 3 ]

2 голосов
/ 04 мая 2010

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

int looker;

...

for(i = 0; i < searchAmount; i++){
      if(seqSearch(numbers, 100, searches[i], &where, &looker)){
            searches[i] += looker;
            searchSuccess++;       
      }else{
            searchUnsuccess++;
      }
}


bool seqSearch (int list[], int last, int target, int* locn, int *looker){
     *looker = 0;
     while(*looker < last && target != list[*looker]){
                  (*looker)++;
     }

     *locn = *looker;
     return(target == list[*looker]);
}

Кстати, вы можете пересмотреть определение функций в вашем заголовочном файле; это может вызвать проблемы с дублирующимся символом при связывании, если у вас есть более одного файла c, включая этот файл.

1 голос
/ 04 мая 2010

Одна проблема заключается в том, что приращение средства просмотра в seqSearch увеличивает указатель, а не значение. Вероятно, должно быть:

(*looker)++;
1 голос
/ 04 мая 2010

Почему бы просто не передать looker в качестве int*, использовать его по существу так же, как вы, посмотреть на значение после возврата seqSearch(...) и добавить его к промежуточной сумме обратно в main()?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...