Форум программистов, компьютерный форум CyberForum.ru

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Netti
0 / 0 / 0
Регистрация: 27.03.2013
Сообщений: 9
#1

Почему одинаковые коды работают по разному? - C++

04.04.2013, 20:09. Просмотров 402. Ответов 7
Метки нет (Все метки)

Всем привет!
У меня довольно необычная проблема. Суть её в том, что я написал программу по аналогии с чужой программой. Однако несмотря на то, что коды одинаковые (непринципиальные различия, вроде выведения разных сообщений на экран, я в расчет не беру), моя программа не работает. Конкретно, значение z остается нулевым. Ошибку, несмотря на целый день поиска, не нахожу.
Сама задача такая:
1. Разработать алгоритм и написать программу, которая создает одномерный массив и заполняет его, пока текущее значение, введенное с клавиатуры, не окажется меньше суммы уже введенных значений или пока не будет введено максимальное количество значений.
2. Программа должна сформировать новый массив из нечетных элементов исходного массива.
Если кому-нибудь не очень влом, помогите найти ошибку И пожалуйста, не присылайте своих вариантов решений, я в них всё равно не разберусь, ибо новичок.

Вот мой код:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
#include <stdio.h>
#include <conio.h>
void main (void)
 {
  int a[100], b[100], s, i=1, k=0, j=0, z=0;
  char r;
  do
   {
    printf ("\n Vvedite 1-e chislo massiva A: \n");
     scanf ("%d", &a[0]);
     s = a[0];
     do
      {
       printf ("\n Vvedite element massiva \n");
       scanf ("%d", &a[i]);
       k++;
       if (a[i] >= s)
        {
         s = s + a[i];
         i++;
        }
       }
      while (a[i] >= s);
     puts ("\n Massiv A: \n");
     for (i=0; i<=k; i++)
      printf ("%6d", a[i]);
     for (i=0; i<=k; i++);
      {
       if (a[i] % 2 != 0)
        {
         b[j] = a[i];
         z++;
         j++;
        }
      }
     puts ("\n Massiv B: \n");
     if (z != 0)
      for (j=0; j<z; j++)
       printf ("%6d", b[j]);
     else
      printf ("\n Massiv B pustoy \n");
     puts ("\n Eshe raz? y/n \n");
     fflush (stdin);
     scanf ("%c", &r);
   }
  while (r == 'y');
 }
А вот чужой:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
#include <stdio.h>
#include <conio.h>
void main (void)
{
int a[100],b[100],s,i=1,k=0,j=0,z=0;
char r;
do
{
puts("\n Hello! Please, enter the elements of the first array \n");
puts("\n***********************************************************\n");
printf("\n Vvedite 1 chislo\n");
scanf("%d",&a[0]);
s=a[0];
do
{
   printf("\n Vvedite %d chislo \n",i+1);
   scanf("%d",&a[i]);
   k++;
   if(a[i]>=s)
  {
     s=s+a[i];
     i++;
  }
}
while(a[i]>=s);
puts("\n\n");
puts("\n Massiv A \n");
for (i=0;i<=k; i++)
   printf("%6d",a[i]);
 for(i=0;i<=k;i++)
{
    if (a[i]%2!=0)
   {
       b[j]=a[i];
       z++;
       j++;
   }
}
puts("\n***********************************************************\n");
puts("\n Massiv B of odd elements \n");
if(z!=0)
  for (j=0;j<z;j++)
        printf("%6d",b[j]);
else
  printf("\n Massiv b pustoi\n");
puts("\n***********************************************************\n");
puts("\n Continue? (Y/N)\n");
fflush(stdin);
scanf("%c",&r);
}
while(r=='Y');
getch();
}
Заранее спасибо за помощь!
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
04.04.2013, 20:09
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Почему одинаковые коды работают по разному? (C++):

Цикл по-разному выполняет одинаковые команды - C++
Здравствуйте, пишу программу. Если вкратце, то программа сводит кое-какую задачу к задаче линейного программирования (ЛН), и потом её...

Fflush(stdin) по-разному работают в unix и windows - C++
Собственно, код: #include &lt;iostream&gt; #include &lt;cstdio&gt; using namespace std; int main() { char word1, word2; ...

Одинаковые коды клавиш-стрелочек - C++
Есть задача написать меню . В консольном приложении. Состоит из 6ти пунктов(строчек) Выбор строчи с помощью клавиш вверх вниз ,...

не работают все коды - C++
при компилировании любого кода в консоли появляется сообщение&quot;&quot;адрес файла&quot; не является внутренней или внешней программой или пакетным...

Почему в книгах по C++ материал подаётся по-разному? - C++
Накачал почти все какие существуют книги по программированию и вот в частности по си++ в каждой книге по разному все рассказывается, как я...

Почему в разных учебниках главная функция называется по разному? - C++
Например, иногда (без объяснения) в учебнике говорится, что, цитирую, &quot;в любой программе на C++ главная функция должна называться...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Tulosba
:)
Эксперт С++
4393 / 3236 / 297
Регистрация: 19.02.2013
Сообщений: 9,045
05.04.2013, 11:09 #2
Netti, какие входные данные используете для проверки?
GuGo1991
267 / 261 / 93
Регистрация: 02.08.2012
Сообщений: 609
05.04.2013, 11:36 #3
Не вникал в код, но у вас не инкрементируется i в 14 строчке, в отличии от 16-ой строчки чужого кода...
Ваша 14 строчка:
C++
1
printf ("\n Vvedite element massiva \n");
Чужой код, 16 строчка:
C++
1
printf("\n Vvedite %d chislo \n",i+1);
Ded_Vasilij
231 / 213 / 15
Регистрация: 01.09.2012
Сообщений: 2,103
05.04.2013, 11:58 #4
непонятно зачем массив заполнять через do while когда с помощью for'a это намного проще и понятнее. Поскольку свой вариант кода просили не выкладывать - не буду,
alsav22
5417 / 4813 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
05.04.2013, 13:08 #5
Выход при заполнении неправильно сделан. Зачем там, вообще, какое-то первое число? Проверка на максимальное количество не сделана.

Добавлено через 4 минуты
В 27 строке точка с запятой лишние, захода в for() нет.
alsav22
5417 / 4813 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
05.04.2013, 13:12 #6
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
#include <stdio.h>
#include <conio.h>
void main (void)
 {
  int a[100], b[100], s = 0, i=0, k=0, j=0, z=0;
  char r;
  do
   {
        /*printf ("\n Vvedite 1-e chislo massiva A: \n");
        scanf ("%d", &a[0]);
        s = a[0];*/
        do
        {
               printf ("\n Vvedite element massiva \n");
               scanf ("%d", &a[i]);
               k++;
               if (a[i] >= s)
               {
                     s = s + a[i];
                     i++;
               }
               else break;
        } while (k < 100);
      
         puts ("\n Massiv A: \n");
         
         for (i = 0; i < k; i++)
            printf ("%6d", a[i]);
         
         for (i = 0; i < k; i++)
         {
               if (a[i] % 2 != 0)
                {
                     b[j] = a[i];
                     z++;
                     j++;
                }
         }
         puts ("\n Massiv B: \n");
         if (z != 0)
            for (j=0; j<z; j++)
                printf ("%6d", b[j]);
         else printf ("\n Massiv B pustoy \n");
          
         puts ("\n\n Eshe raz? y/n \n");
         fflush (stdin);
         scanf ("%c", &r);
   
   } while (r == 'y');
 
 
    getchar();
 }
Миниатюры
Почему одинаковые коды работают по разному?  
Netti
0 / 0 / 0
Регистрация: 27.03.2013
Сообщений: 9
05.04.2013, 14:36  [ТС] #7
Всем спасибо за участие, особенно alsav22. А ведь каждую строчку отдельно сверял и ошибки не заметил(( Тему можно считать закрытой, ибо вопрос решен
Tulosba
:)
Эксперт С++
4393 / 3236 / 297
Регистрация: 19.02.2013
Сообщений: 9,045
05.04.2013, 14:57 #8
Netti, чтобы строчки не сверять, надо делать copy-paste. Ну, а если и сверять, то соответствующими утилитами, а не вручную.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
05.04.2013, 14:57
Привет! Вот еще темы с ответами:

Почему функция strchr по разному работает при разных строках? - C++
Только начал изучать С. Пользую Borland C++ v.3.1 Нужно работать со строками. Вот стандартный пример из стандартного хелпа компилятора: ...

Почему операторы инкремента действуют по разному для стандартных и нестандартных типов? - C++
class my { int i; public: my(int in) :i(in) {} operator int () { return i; } int operator=(int...

Почему адреса одинаковые? - C++
Обьясните пожалуйста код, почему адреса одинаковые? #include &lt;iostream&gt; using namespace std; int main() { char *s =...

Почему указатели имеют одинаковые адреса - C++
Например, если взять указатели на массивы. **m имеет тот же адрес, что и *m, что и m


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
05.04.2013, 14:57
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru