C ++ Array функция и манипулирование

0

Хорошо, у меня есть лабораторное задание для класса, чтобы сделать программу, которая, как предполагается, выполняет ряд вещей: 1. Функция void с именем convertWeight преобразует вес в фунтах (тип int) и унциях в эквивалентный вес в килограммах (тип int) и граммов

  1. Функция void с именем showArray, которая принимает два параметра: один параметр массива базового типа int и один параметр по каждому значению параметра массива. Эта функция просто распечатывает все элементы параметра массива, где два последовательных элемента разделяются горизонтальной вкладкой.

  2. В определении функции main() выполните следующие действия:

а. объявите массив с фунтами из 10 целых чисел, инициализируя свои первые 3 элемента следующими значениями: 1, 5, 10 и автоматически инициализируя оставшиеся элементы до 0.

б. напишите for-loop, который читает в 7 весах в фунтах, сохраняя введенные значения до последних 7 элементов массива фунтов.

с. распечатайте одну строку запроса "Весь список веса:", а затем вызовите функцию showArray, чтобы отобразить весь массив фунтов.

д. напишите еще один цикл for-loop, который вызывает функцию convertWeight для преобразования каждого веса в фунтах, заданного в массиве фунтов, до эквивалентного веса в килограммах и граммах.

Это то, что я придумал:

#include <iostream>
using namespace std;


void convertWeight(int pounds, double ounces, int& kg, double& grams);
//Preconditions: parameters pounds and ounces are nonnegative numbers, representing a     weight in pounds and ounces
//Postcondition: parameters kg and grams will be set to values of the equivalent weight   in kilograms and grams
void showArray(int pounds[10]);

int main()
{
        int pounds[10]={1, 5, 10}, i, a, kg;
    double ounces, grams;

    cout << "Enter 7 additional weights in pounds: \n";
    cin >> pounds[3];

    for(i = 4; i < 10; i++)
    {
        cin >> pounds[i];
    }

    cout << "The entire list of weights: \n";

    showArray(pounds[10]);

    for(a = 0; a < 10; a++)
    {
        pounds = pounds[a];
        convertWeight(pounds, ounces, kg, grams);
        cout << pounds[a] << " pounds = " << kg << " kgs and " << grams << "    grams";
    }


    return 0;
}

void showArray(int pounds[10])
{
    cout << pounds[0] << "     " << pounds[1] << "     " << pounds[2] << "     " <<  pounds[3] << "     " << pounds[4] << "     " << pounds[5] << "     "
     << pounds[6] << "     " << pounds[7] << "     " << pounds[8] << "     " <<   pounds[9] << "     " << pounds[10] << "     " ;
}

//Do NOT modify this function definition
void convertWeight(int pounds, double ounces, int& kg, double& grams)
{
  const double KGS_PER_POUND =  0.45359237;
  const double OUNCES_PER_POUND = 16.0;
  const double GRAMS_PER_KG = 1000.0;

  double totalKgs;
  totalKgs = (pounds + ounces/OUNCES_PER_POUND)*KGS_PER_POUND;
  kg = static_cast<int>(totalKgs);
  grams = (totalKgs - kg)*GRAMS_PER_KG;
}

Я новичок в этой вещи Array, и я не могу получить то, что говорит мне моя книга. Не могли бы вы указать, что это не так с моей программой и рассказать мне, почему я знаю.

вот мой список ошибок:

1>c:\users\mackiller\documents\visual studio 2010\projects\lab12\lab12\lab12.cpp(30):  error C2664: 'showArray' : cannot convert parameter 1 from 'int' to 'int []'
1>          Conversion from integral type to pointer type requires reinterpret_cast, C-style cast or function-style cast
1>c:\users\mackiller\documents\visual studio 2010\projects\lab12\lab12\lab12.cpp(34): error C2440: '=' : cannot convert from 'int' to 'int [10]'
1>          There are no conversions to array types, although there are conversions to references or pointers to arrays
1>c:\users\mackiller\documents\visual studio 2010\projects\lab12\lab12\lab12.cpp(35): error C2664: 'convertWeight' : cannot convert parameter 1 from 'int [10]' to 'int'
1>          There is no context in which this conversion is possible

Любая помощь givin будет оценена!

  • 1
    pounds = pounds[a]; - Вы не можете назначить отдельный элемент массива в самой переменной массива. Просто определите новую переменную int с не конфликтующим именем.
  • 0
    Я должен был использовать переменную цикла для "а", который меняет значение каждого цикла
Показать ещё 1 комментарий
Теги:
arrays

1 ответ

2

c:\users\mackiller\documents\visual studio 2010\projects\lab12\lab12\lab12.cpp(30): ошибка C2664: 'showArray': невозможно преобразовать параметр 1 из 'int' в 'int []' 1>
Для преобразования от целочисленного типа к типу указателя требуется reinterpret_cast, листинг типа C или стиль функции

Проблема здесь

showArray(pounds[10]);

Это не пройдет массив, он попытается получить доступ к 11-му элементу массива (и вызвать неопределенное поведение) и передать его showArray (который принимает указатель в качестве аргумента). Что вы хотите сделать:

showArray(pounds);

1> c:\users\mackiller\documents\visual studio 2010\projects\lab12\lab12\lab12.cpp(34): ошибка C2440: '=': невозможно преобразовать из 'int' в 'int [10]' 1> Переходов на типы массивов нет, хотя есть ссылки на ссылки или указатели на массивы

Эта проблема здесь:

pounds = pounds[a];

Вы пытаетесь назначить int массиву. Вам не нужна эта строка вообще:

convertWeight(pounds[a], ounces, kg, grams);

Который также исправляет эту ошибку:

1> c:\users\mackiller\documents\visual studio 2010\projects\lab12\lab12\lab12.cpp(35): ошибка C2664: 'convertWeight': невозможно преобразовать параметр 1 из 'int [10]' в 'int' 1>
Нет никакого контекста, в котором это преобразование возможно

  • 0
    Большое спасибо! Теперь я понимаю. Кажется, я иду в неправильном направлении. Также еще одна вещь. Так как он исправил мои ошибки, он дал мне новые: ошибка C2109: для индекса требуется массив или указатель типа, он дал мне эту ошибку 10 раз подряд в функции showArray. Я, кажется, сделал эту программу неправильно. Есть ли другой способ или исправление того, как я пытаюсь распечатать массивы?
  • 0
    Какие изменения вы внесли в showArray ?

Ещё вопросы

Сообщество Overcoder
Наверх
Меню