Одесса: 11°С (вода 9°С)
Киев: 3°С
Львов: 2°С

Тема: Помогите с задачей на с++

Ответить в теме
Показано с 1 по 11 из 11
  1. Вверх #1
    Новичок
    Пол
    Мужской
    Адрес
    Одесса
    Возраст
    34
    Сообщений
    4
    Репутация
    11

    По умолчанию Помогите с задачей на с++

    Собственно задача такая. - С клавиатуры вводятся целые числа. Признак конца ввода – 0. Определить количество введенных нечетных чисел.
    Я написал программу, но она работает некорректно, а я в упор не вижу, где тут ошибка...

    #include <cstdlib>
    #include <iostream>

    using namespace std;

    int main(int argc, char *argv[])
    {
    int m=0, n=0, i=0, j;
    int a[100];
    cout<<"\n Vvodite chisla. Esli hotite zakonchit', vvedite 0\n";
    while (i<100)
    {cin>>a[i];
    i++;
    if (a[i]==0) break;

    }
    for (j=1;j<=i;j++)
    {
    if ((a[i] % 2) == 1) m++;
    }
    cout<<"Kolichestvo nechetnyh chisel = "<<m;
    system("PAUSE");
    return EXIT_SUCCESS;
    }

    Помогите, пожалуйста.


  2. Вверх #2
    как на счет поменять местами эти два оператора:

    i++;
    if (a[i]==0) break;

    а то получается, что Вы увеличиваете индекс на единицу...и только тогда обращаетесь к массиву, т.е. Вы проверяете не текущее значение (введённое с клавиатуры) на ноль, а следующее в массиве...т.е. наступит момент, когда Вы обратитесь за границы массива..а это уже не желательно


    for (j=1;j<=i;j++)

    здесь j нужно инициализировать нулём, а не единицей...а то получается, что нулевой эл.-т массива не участвует в проверке


    и ещё...хоть убейте, но не понимаю зачем здесь нужна переменная n=0

  3. Вверх #3
    Не покидает форум Аватар для -=TigeR=-
    Пол
    Мужской
    Адрес
    Одесса
    Сообщений
    6,622
    Репутация
    1300
    Цитата Сообщение от wolverston Посмотреть сообщение
    ...
    Я написал программу, но она работает некорректно, а я в упор не вижу, где тут ошибка.......
    а желание воспользоваться дебагером случайно не возникало?
    и пошагово просмотреть что же делает это мега программа....

  4. Вверх #4
    Новичок
    Пол
    Мужской
    Адрес
    Одесса
    Возраст
    34
    Сообщений
    4
    Репутация
    11
    Спасибо за помощь. С первым советом действительно косяк идиотский, а вот подсчет отрицательных во втором цикле не удался никак, пришлось вносить счетчик в первый же цикл, даже симпатичнее получилось ))

  5. Вверх #5
    Цитата Сообщение от wolverston Посмотреть сообщение
    Спасибо за помощь. С первым советом действительно косяк идиотский, а вот подсчет отрицательных во втором цикле не удался никак, пришлось вносить счетчик в первый же цикл, даже симпатичнее получилось ))
    а Вы в этой строчке
    if ((a[i] % 2) == 1) m++;

    поменяйте условие на такое:

    if (!((a[i] % 2) == 0)) m++

    и тогда ненужно никаких счетчиков...в этом случае будут и отрицательные отлавливаться


    а для симпатичности (рас уж для Вас это важно), можно эти два оператора
    i++;
    if (a[i]==0) break;

    заменить одним

    if (a[i++]==0) break;

  6. Вверх #6
    А зачем массив-то?
    Код:
    #include <iostream>
    
    int main(int argc, char *argv[])
    {
    	int odds = 0;
    	int item;
    	std::cout << "Vvodite chisla. Esli hotite zakonchit', vvedite 0" << std::endl;
    	do
    	{
    		std::cin >> item;
    		if (item % 2 != 0)
    		{
    			++odds;
    		}
    	} 
    	while (item != 0);
    	std::cin.get();
    
    	std::cout << "Kolichestvo nechetnyh chisel = " << odds;
    	std::cin.get();
    
    	return 0;
    }

  7. Вверх #7
    Новичок
    Пол
    Мужской
    Возраст
    34
    Сообщений
    18
    Репутация
    13
    Люди помогите разобраться.

    Код HTML:
    cout<<"Введите буквы для американского формата (am, pm или no - для евро формата)\n";
    	do {
    		scanf ("%2s",f);  //Ввод формата.
    		if (strcmp(f,"am")!=0) {  //условие на правильность ввода формата.
    		cout<<"Вы ввели неправильный формат, введите заново\n";
    		}
    	}
    	while (strcmp(f,"am")!=0)
    А если я хочу задать несколько условий, у меня ничего не выходит.

    Например:

    Код HTML:
    cout<<"Введите буквы для американского формата (am, pm или no - для евро формата)\n";
    	do {
    		scanf ("%2s",f);  //Ввод формата.
    		if ((strcmp(f,"am")!=0)||(strcmp(f,"am")!=0)||(strcmp(f,"am")!=0)) {  //условие на правильность ввода формата.
    		cout<<"Вы ввели неправильный формат, введите заново\n";
    		}
    	}
    	while ((strcmp(f,"am")!=0)||(strcmp(f,"am")!=0)||(strcmp(f,"am")!=0));
    Этот код не работает

  8. Вверх #8
    а может здесь:
    while ((strcmp(f,"am")!=0)||(strcmp(f,"am")!=0)||(strcmp (f,"am")!=0));
    точка с запятой (в конце) лишняя?

  9. Вверх #9
    Не покидает форум Аватар для -=TigeR=-
    Пол
    Мужской
    Адрес
    Одесса
    Сообщений
    6,622
    Репутация
    1300
    Цитата Сообщение от Aksined Посмотреть сообщение
    Люди помогите разобраться.
    ......
    Этот код не работает
    а в дебагер ты хоть смотрел? или это страшное ругательное слово...
    этот код не работает правильно даже с одним условием...
    введи больше двух символов...
    сравни со своим и найди 10 отличий...
    Код:
    char f[10];
    cout<<"Введите буквы для американского формата (am, pm или no - для евро формата)\n";
    do {
    	scanf("%9s", f, 10);  //Ввод формата.
    	if ((strcmp(f,"am")!=0)&&(strcmp(f,"pm")!=0)&&(strcmp(f,"no")!=0)) {  //условие на правильность ввода формата.
    	cout<<"Вы ввели неправильный формат, введите заново\n";
    	}
    }
    while ((strcmp(f,"am")!=0)&&(strcmp(f,"pm")!=0)&&(strcmp(f,"no")!=0));

  10. Вверх #10
    Посетитель
    Пол
    Мужской
    Возраст
    32
    Сообщений
    227
    Репутация
    32
    это судя по всему студентческие лабораторки?!

  11. Вверх #11
    Новичок
    Пол
    Мужской
    Возраст
    34
    Сообщений
    18
    Репутация
    13
    Всем спасибо, с предыдущей задачей я справился.

    теперь просьба такая:

    Ув. программисты у кого есть исходники на С++ простенького органайзера, могли бы выложить.
    Можно в личку.
    Буду также рад алгоритму написания проги.

    Огромное спасибо.


Ответить в теме

Социальные закладки

Социальные закладки

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения