Japanese Relaxation Ответов: 4

Мой учитель сказал, что мой код не правильный, и сказал мне найти ошибку и решить, но я не могу решить. Нужна помощь!


Populate a one-dimensional array with the following grades in this order:

90, 61, 74, 42, 83, 51, 71, 83, 98, 87, 94, 68, 44, and 66. 

Use a loop to call a method from main() that adds 15 points to all student grades that are a C or above.  A C is defined as a score of 70 or above.  Make this happen by passing the subscript value and not the entire array. The addition of the 15 points should happen in the method and be passed back to main.  Use a loop to show final values within the array.  The final array values should show the new adjusted grades.


Что я уже пробовал:

#include <iostream>
using namespace std;
void func(int& num)
{
	if (num >= 70)
		num += 15;
}
int main()
{
	int arr[] = { 90, 61, 74, 42, 83, 51, 71, 83, 98, 87, 94, 68, 44, 66 };// array number 
	for (int i = 0; i < 14; i++)
	{
		func(arr[i]);
	}
	cout << " The new adjusted grade scores are: ";
	for (int i = 0; i < 14; i++)
	{
		cout << arr[i] << " ";
	}
	cout << endl;
	return 0;
}

Joe Woodbury

Является ли предположение, что оценки ограничиваются 100?

Japanese Relaxation

да

Dave Kreskowiak

Итак, какой код у вас есть, чтобы убедиться, что счет не превысит 100?

Japanese Relaxation

да не больше 100

jeron1

что происходит, когда стартовый счет равен 98?

Richard Andrew x64

Похоже, что ваша программа верна, за исключением ограничения вычисления до 100 или менее. Что, по словам учителя, с ним не так?

Japanese Relaxation

сдал локацию не то значение что он сказал

4 Ответов

Рейтинг:
29

Rick York

Я не уверен, почему вы были бы ограничены таким образом, но, похоже, вы должны передать только индекс, что означает, что данные должны быть глобально доступны. Как упоминалось ранее, значение четырнадцать не должно быть жестко закодировано. Вот один из способов, которым вы можете справиться с этими вещами :

#include <iostream>

const int ScoreCount = 14;
int Scores[ ScoreCount ] = { 90, 61, 74, 42, 83, 51, 71, 83, 98, 87, 94, 68, 44, 66 };

void func( int index )
{
    if( Scores[ index ] >= 70 )
        Scores[ index ] += 15;
}

int main()
{
    for( int i = 0; i < ScoreCount; i++ )
    {
        func( i );
    }

    std::cout << " The new adjusted grade scores are: ";

    for( int i = 0; i < ScoreCount; i++ )
    {
        std::cout << i << " : " << Scores[ i ] << std::endl;
    }
    return 0;
}


KarstenK

Вовсе нет: она может быть решена с помощью указателей или синтаксиса ref :-O

Rick York

Я по-разному интерпретировал фразу "значение индекса". Для меня это означало индекс в массиве - значение подстрочного индекса. Если вы интерпретируете его как значение индекса, то это значительно проще. Расплывчатые формулировки всегда раздражают меня.

Рейтинг:
11

CPallini

Еще один способ сделать это

#include <iostream>
using namespace std;

int main()
{
  int arr[] = { 90, 61, 74, 42, 83, 51, 71, 83, 98, 87, 94, 68, 44, 66 };

  auto transform = [& arr](int index){ arr[index] += (arr[index] > 70 ? 15 : 0); };


  for (size_t i=0; i<sizeof(arr)/sizeof(arr[0]); ++i)
    transform(i);


  for (auto a : arr)
    cout << a << ", ";
  cout << endl;

}


KarstenK

Это решение не должно исходить только от того, кто может "объяснить" его своему учителю ;-)

CPallini

Учителям очень нужен кто-то, кто поощряет их преподавать современный C++.
:-)

Рейтинг:
1

KarstenK

только добавьте это, что назначит результат входным данным:

for (int i = 0; i < 14; i++)
{
	arr[i] = func(arr[i]);
}
Вам лучше не писать причудливые вещи, которые вы не можете объяснить учителю или перед своим классом.

Совет посетите некоторые Изучите учебник по C++ чтобы изучить язык и современные инструменты.


CPallini

5.

Рейтинг:
0

Gerry Schmitz

Вы используете жестко закодированный 14 в своем цикле for. Не совсем "неправильно", но потерпит неудачу каждый раз, когда вы измените размер массива. Вы должны использовать длину массива, чтобы ограничить цикл for.


Japanese Relaxation

Вы не возражаете, может ты мне покажешь ?