Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 20.05.2012, 19:20   #1
scrinn
Пользователь
 
Регистрация: 20.05.2012
Сообщений: 10
Восклицание Исправить/Указать ошибку

С++ Работа с массивами
Задача:Даны 2 массива из n целых чисел (n<=10).Для каждого массива определить количество нечетных элементов.Описать в виде отдельной функции определение количества нечетных элементов данного массива.
Вот собственно код:


Код:
#include <iostream>
#include <stdio.h>
using namespace std;
int KolvoNe4Elem (char s[])
{
	int i,k=0;
	for (i=0;s[i]!='\0';i++)
		if (s[i]%2 !=0)k++;
	return k;
}
using namespace std;
void main()
{
	char s1[81],s2[81];
	cout<<"vvedite 2 stroki \n";
	gets(s1);
	gets(s2);
	printf (" v 1 stroke %d ne4 4isel\n",KolvoNe4Elem(s1));
    printf (" vo 2 stroke %d ne4 4isel\n",KolvoNe4Elem(s2));
	
}
Проблема:
Программа выполняет то что от нее требуется пока вводишь числа меньше 10, как только начинаешь вбивать числа которые больше она выдает абсолютно рандомный результат,нужно сделать чтобы количество членов массива было <=10
Спасибо

Последний раз редактировалось scrinn; 20.05.2012 в 19:33.
scrinn вне форума Ответить с цитированием
Старый 20.05.2012, 19:44   #2
s-andriano
Старожил
 
Аватар для s-andriano
 
Регистрация: 08.04.2012
Сообщений: 3,229
По умолчанию

А это ничего, что вместо чисел ты работаешь с символами?
Пока числа однозначные, проблем нет, а как только появляются многозначные, программа начинает трактовать каждую цифру как отдельное число (благо, у пробела четный код, так что на результат это не сказывается).
s-andriano вне форума Ответить с цитированием
Старый 20.05.2012, 19:50   #3
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
char s1[81],s2[81];
А зачем строкой? Почему не массивами типа int?
Вот же твоя проблема - символ строки не может содержать число.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 20.05.2012, 20:31   #4
scrinn
Пользователь
 
Регистрация: 20.05.2012
Сообщений: 10
По умолчанию

Цитата:
Сообщение от Stilet Посмотреть сообщение
А зачем строкой? Почему не массивами типа int?
Вот же твоя проблема - символ строки не может содержать число.
Цитата:
Сообщение от s-andriano Посмотреть сообщение
А это ничего, что вместо чисел ты работаешь с символами?
Пока числа однозначные, проблем нет, а как только появляются многозначные, программа начинает трактовать каждую цифру как отдельное число (благо, у пробела четный код, так что на результат это не сказывается).
Когда я заменил везде char на int

Код:
#include <iostream>
#include <stdio.h>
using namespace std;
int KolvoNe4Elem (int s[])
{
	int i,k=0;
	for (i=0;s[i]!='\0';i++)
		if (s[i]%2 !=0)k++;
	return k;
}
using namespace std;
int main()
{
	int s1[81],s2[81];
	cout<<"vvedite 2 stroki \n";
	gets(s1);
	gets(s2);
	printf (" v 1 stroke %d ne4 4isel\n",KolvoNe4Elem(s1));
    printf (" vo 2 stroke %d ne4 4isel\n",KolvoNe4Elem(s2));
	
}
то подчеркивается красным s1 и s2 в строках gets(s1); gets(s2);
и выдает следующее:
1>------ Построение начато: проект: lab_alg(4), Конфигурация: Debug Win32 ------
1> lab_alg(4).cpp
1>e:\my documents\visual studio 2010\projects\lab_alg(4)\lab_alg(4) \lab_alg(4).cpp(16): error C2664: gets: невозможно преобразовать параметр 1 из "int [81]" в "char *"
1> Типы, на которые указывают указатели, не связаны; для преобразования требуется reinterpret_cast, приведение в стиле С или приведение в стиле функции
1>e:\my documents\visual studio 2010\projects\lab_alg(4)\lab_alg(4) \lab_alg(4).cpp(17): error C2664: gets: невозможно преобразовать параметр 1 из "int [81]" в "char *"
1> Типы, на которые указывают указатели, не связаны; для преобразования требуется reinterpret_cast, приведение в стиле С или приведение в стиле функции
========== Построение: успешно: 0, с ошибками: 1, без изменений: 0, пропущено: 0 ==========
scrinn вне форума Ответить с цитированием
Старый 20.05.2012, 20:48   #5
Greblin
Меркантильный кю
Участник клуба
 
Аватар для Greblin
 
Регистрация: 02.02.2008
Сообщений: 1,001
По умолчанию

Прочитайте те сообщения об ошибках, которые выдал Вам компилятор, и подумайте, какой логичный вывод можно из них сделать.
Правильно! gets считывает строки, и аргумент у неё тоже должен быть строкой, а вы подаёте int*. Следовательно, использовать gets нельзя. А как тогда? Правильно, запросить у пользователя, сколько он чисел введёт и считать их в цикле. Например так
Код:
int n1;
cout << "vvedite kolichestvo elementov v 1 massive: \n";
cin >> n1;
cout << "vvedite elementi massiva: \n";
for (int i = 0; i < n1; ++i) cin >> s1[i];
После этого со вторым массивом у Вас тоже всё получится, я в Вас верю!
Росли вроде умными, выросли дурнями... (c)А.Васильев
Greblin вне форума Ответить с цитированием
Старый 20.05.2012, 20:56   #6
scrinn
Пользователь
 
Регистрация: 20.05.2012
Сообщений: 10
По умолчанию

Цитата:
Сообщение от Greblin Посмотреть сообщение
Прочитайте те сообщения об ошибках, которые выдал Вам компилятор, и подумайте, какой логичный вывод можно из них сделать.
Правильно! gets считывает строки, и аргумент у неё тоже должен быть строкой, а вы подаёте int*. Следовательно, использовать gets нельзя. А как тогда? Правильно, запросить у пользователя, сколько он чисел введёт и считать их в цикле. Например так
Код:
int n1;
cout << "vvedite kolichestvo elementov v 1 massive: \n";
cin >> n1;
cout << "vvedite elementi massiva: \n";
for (int i = 0; i < n1; ++i) cin >> s1[i];
После этого со вторым массивом у Вас тоже всё получится, я в Вас верю!
Спасибо, но мне не хватило бы знаний чтобы сделать эти выводы.У вас отличительная особенность письма.
scrinn вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Прошу указать на ошибку Gamst Паскаль, Turbo Pascal, PascalABC.NET 3 26.12.2011 19:25
Debug - как заставить Delphi точно указать на строку кода вызывающую ошибку? delphicoding Общие вопросы Delphi 16 30.07.2011 10:47
Указать на ошибку valerij Microsoft Office Excel 15 26.10.2008 13:31
Исправить ошибку LLIypLLIyH Помощь студентам 5 16.06.2008 16:50