Не удается реализовать пузырчатую сортировку и линейный поиск - C (СИ)

Узнай цену своей работы

Формулировка задачи:

Добрый день всем, я для саморазвития решил изучить основы Си, сам я очень далек от программирования. Сейчас прохожу небольшой курс, выполняю практическую работу, но столкнулся с проблемой которую у меня не выходит решить. Изначально мне даны четыре программы:
Листинг программы
  1. generate.c
  2. /**
  3. * generate.c
  4. *
  5. * Computer Science 50
  6. * Problem Set 3
  7. *
  8. * Generates pseudorandom numbers in [0,LIMIT), one per line.
  9. *
  10. * Usage: generate n [s]
  11. *
  12. * where n is number of pseudorandom numbers to print
  13. * and s is an optional seed
  14. */
  15. #define _XOPEN_SOURCE
  16. #include <cs50.h>
  17. #include <stdio.h>
  18. #include <stdlib.h>
  19. #include <time.h>
  20. // constant
  21. #define LIMIT 65536
  22. int main(int argc, string argv[])
  23. {
  24. // TODO: comment me
  25. if (argc != 2 && argc != 3)
  26. {
  27. printf("Usage: generate n [s]\n");
  28. return 1;
  29. }
  30. // TODO: comment me
  31. int n = atoi(argv[1]);
  32. // TODO: comment me
  33. if (argc == 3)
  34. {
  35. srand48((long int) atoi(argv[2]));
  36. }
  37. else
  38. {
  39. srand48((long int) time(NULL));
  40. }
  41. // TODO: comment me
  42. for (int i = 0; i < n; i++)
  43. {
  44. printf("%i\n", (int) (drand48() * LIMIT));
  45. }
  46. // success
  47. return 0;
  48. }
  49.  
  50. find.c
  51. /**
  52. * find.c
  53. *
  54. * Computer Science 50
  55. * Problem Set 3
  56. *
  57. * Prompts user for as many as MAX values until EOF is reached,
  58. * then proceeds to search that "haystack" of values for given needle.
  59. *
  60. * Usage: ./find needle
  61. *
  62. * where needle is the value to find in a haystack of values
  63. */
  64. #include <cs50.h>
  65. #include <stdio.h>
  66. #include <stdlib.h>
  67. #include "helpers.h"
  68. // maximum amount of hay
  69. const int MAX = 65536;
  70. int main(int argc, string argv[])
  71. {
  72. // ensure proper usage
  73. if (argc != 2)
  74. {
  75. printf("Usage: ./find needle\n");
  76. return -1;
  77. }
  78. // remember needle
  79. int needle = atoi(argv[1]);
  80. // fill haystack
  81. int size;
  82. int haystack[MAX];
  83. for (size = 0; size < MAX; size++)
  84. {
  85. // wait for hay until EOF
  86. printf("\nhaystack[%i] = ", size);
  87. int straw = GetInt();
  88. if (straw == INT_MAX)
  89. {
  90. break;
  91. }
  92. // add hay to stack
  93. haystack[size] = straw;
  94. }
  95. printf("\n");
  96. // sort the haystack
  97. sort(haystack, size);
  98. // try to find needle in haystack
  99. if (search(needle, haystack, size))
  100. {
  101. printf("\nFound needle in haystack!\n\n");
  102. return 0;
  103. }
  104. else
  105. {
  106. printf("\nDidn't find needle in haystack.\n\n");
  107. return 1;
  108. }
  109. }
  110.  
  111. helpers.c
  112. /**
  113. * helpers.c
  114. *
  115. * Computer Science 50
  116. * Problem Set 3
  117. *
  118. * Helper functions for Problem Set 3.
  119. */
  120. #include <cs50.h>
  121. #include "helpers.h"
  122. /**
  123. * Returns true if value is in array of n values, else false.
  124. */
  125. bool search(int value, int values[], int n)
  126. {
  127. // TODO: implement a searching algorithm
  128. return false;
  129. }
  130. /**
  131. * Sorts array of n values.
  132. */
  133. void sort(int values[], int n)
  134. {
  135. // TODO: implement an O(n^2) sorting algorithm
  136. return;
  137. }
  138.  
  139. helpers.h
  140. /**
  141. * helpers.h
  142. *
  143. * Computer Science 50
  144. * Problem Set 3
  145. *
  146. * Helper functions for Problem Set 3.
  147. */
  148. #include <cs50.h>
  149. /**
  150. * Returns true if value is in array of n values, else false.
  151. */
  152. bool search(int value, int values[], int n);
  153. /**
  154. * Sorts array of n values.
  155. */
  156. void sort(int values[], int n);
В программе helpers.c, я должен написать функцию сортировки, и функцию линейного поиска. Это я и попытался сделать, вот так выглядит мой код:
Листинг программы
  1. helpers.c
  2. #include <cs50.h>
  3. #include "helpers.h"
  4.  
  5. bool search(int value, int values[], int n)
  6. {
  7. for (int i = 0; i < n; i++)
  8. {
  9. if (values[n] == value)
  10. {
  11. return true;
  12. }
  13. return false;
  14. }
  15. }
  16.  
  17. void sort(int values[], int n)
  18. {
  19. int temp;
  20. int ctr = 0;
  21. int didswap;
  22. do
  23. {
  24. didswap = 0;
  25. for (int i = 0; i < n; i++)
  26. {
  27. if (values[i] > values[i + 1])
  28. {
  29. temp = values[i];
  30. values[i] = values[i + 1];
  31. values[i + 1] = temp;
  32. didswap = 1;
  33. }
  34. }
  35. ctr = ctr + 1;
  36. }
  37. while (ctr < n && didswap != 0);
  38. }
Остальные программы я не видоизменял. При попытке, проверить программу в автоматическим тестировании я вижу такой результат Я не очень понимаю, где ошибся, может быть кто знает?
Еще мне не очень понятно, почему при запуске команды - "./generate 10 50 | ./find 127", я получаю пустой массив. Ведь , как я понимаю должно было сгенерироваться 10 псевдослучайных чисел, и переместиться в программу find, и заполнить массив из haystack[]. а я получаю:

Решение задачи: «Не удается реализовать пузырчатую сортировку и линейный поиск»

textual
Листинг программы
  1. bool search(int value, int values[], int n)
  2. {
  3.     for (int i = 0; i < n; i++)
  4.    {
  5.       if (values[n] == value)
  6.       {
  7.        return true;
  8.       }
  9.     //сразу уходим как первый раз не нашли, может нужно вынести return false; из цикла?
  10.       return false;
  11.      
  12.    }
  13. }

Объяснение кода листинга программы

В данном коде реализована функция поиска значения в массиве.

  1. bool search(int value, int values[], int n) - это объявление функции с тремя параметрами: value - значение, которое мы ищем в массиве, values - сам массив, n - его размер. Функция возвращает true, если значение найдено, и false в противном случае.
  2. for (int i = 0; i < n; i++) - это цикл, который проходит по всем элементам массива. На каждой итерации значение i увеличивается на 1.
  3. if (values[n] == value) - это условие, при котором мы нашли искомое значение. В данном случае мы сравниваем value с элементом массива с индексом n.
  4. return true; - если условие выполнено, то функция возвращает true.
  5. return false; - если мы не нашли искомое значение после прохода по всем элементам массива, то возвращаем false. Таким образом, данный код реализует линейный поиск значения в массиве.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

5   голосов , оценка 4.6 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы