Возможно, что-то вроде этого:
#!/bin/bash
echo Enter Number:
read num
function1() { echo one; }
function2() { echo two; }
case $num in
1)
function$num
;;
2)
function$num
;;
esac
Проблема не в том, сколько номеров вы храните, а в том, где вы их храните; вы храните 101 в a[101]
, что, очевидно, неправильно.
Если i: нечетное число - C, правильный индекс i-1, а не C.
Наиболее читаемым изменением, вероятно, является введение новой переменной счетчика.
int main() {
int a[100] = {0};
int count = 0;
for (int number = 1; number < 200; number++) {
if (number % 2 == 1) {
a[count] = number;
count += 1;
}
}
}
Я думаю, что преобразование этого из задачи поиска в проблему генерации облегчает понимание.
Если вам случится вспомнить, что каждое нечетное число C
может быть записано в форме 2 * A + 1
для некоторого A
, вы 'увидите, что последовательность, которую вы ищете, равна
2*0+1, 2*1+1, 2*2+1, ..., 2*99+1
[ 1113] так
int main()
{
int numbers[100] = {0};
for (int i = 0; i < 100; i++)
{
numbers[i] = 2 * i + 1;
}
}
Вы также можете пойти другим путем, перебирая нечетные числа и сохраняя их в нужном месте:
int main()
{
int numbers[100] = {0};
for (int i = 1; i < 200; i += 2) // This loops over the odd numbers.
{
numbers[i/2] = i; // Integer division makes this work.
}
}
Если у вас есть массив a
, который был создан с элементами n
, то при попытке получить доступ к элементу массива из облака это неопределенное поведение. Таким образом, индекс ДОЛЖЕН всегда быть между 0 и n-1.
Таким образом, поведение вашей программы не определено, как только count
равно 100, так как оценка условия в if
-предложении уже пытается получить доступ за пределами.
Теперь, кроме того, есть серьезная ошибка в логике вашей программы: если вы хотите добавить числа, которые удовлетворяют некоторому условию, вам нужно 2 счетчика: один для итерации по числам и один для последнего индекса, используемого в массиве:
for (int nextitem=0, count = 1; count < 200; count++) {
if (count % 2 == 1) { // not a[count], you need to test number itself
a[nextitem++] = count;
cout << count << endl;
if (nextitem == 100) { // attention: hard numbers should be avoided
cout << "Array full: " << nextitem << " items reached at " << count <<endl;
break; // exit the for loop
}
}
}
Но, это решение требует, чтобы вы отслеживали последний элемент в массиве и размер массива (это жестко запрограммировано здесь).
Вы, вероятно, учитесь. Но в C ++ лучшим решением было бы использовать vector
вместо массива и использовать push_back()
. Векторы управляют памятью, так что вы можете сосредоточиться на своем алгоритме. Полная программа будет выглядеть следующим образом:
vector<int> a;
for (int count = 1; count < 200; count++) {
if (count % 2 == 1) {
a.push_back(count);
cout << count << endl;
}
}
cout << "Added " << a.size() << " elements" <<endl;
cout << "10th element: "<< a[9] << endl;