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

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

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

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

Ответ
 
Опции темы Поиск в этой теме
Старый 15.02.2009, 17:02   #1
kAND
Пользователь
 
Аватар для kAND
 
Регистрация: 30.11.2006
Сообщений: 15
По умолчанию Проблема при работе с массивом

Приветствую всех. Вобщем ситуация следующая, переписывая лабу с паскаля на си, столкнулся с кое-какой проблемкой.
Вот написанный мной код:
Код:
#include <stdio.h>
#include <conio.h>
void main()
{
int a[14];
int n=0,s=0,i;

clrscr();
printf("Enter elements of the array\n");
for (i=0;i<=14;i++)
  {
  scanf("%d",&a[i]);
  if (a[i]>a[s]) s=i;
  else
    if (a[i]==a[s]) n++;
  }
printf("There are %d max values.\nMax value is: %d",n,a[s]);
getch();
}
Код этой же программы на паскале:
Код:
program L6_2;
uses crt;
var n,s,i:integer;
    a:array[1..15] of integer;
begin
  clrscr;
  s:=1;
  n:=0;
  writeln('Enter array elements');
  for i:=1 to 15 do
    begin
      readln(a[i]);
      if a[i]>a[s] then s:=i
      else
        if a[i]=a[s] then n:=n+1;
    end;
  writeln('There are ',n,' max values.',#10,#13,'Max value is: ',a[s]);
  readln;
end.
Суть программы проста до безобразия, узнать максимальный элемент в массиве и показать сколько их.

Проблема заключается в следующем: код на паскале работает как часики, а вот на си... на последнем шаге работы цикла в переменную n невообразимым способом попадает некоторое число равное приблизительно a[i]

Программу тестировал следующими входными данными:
1 2 3 4 5 6 7 8 9 1 2 3 4 5 6
по идее максимальное число 9, их кол-во - 1, а программа пишет, что их 6

Уже довольно долго сижу и не могу понять в чем дело...
kAND вне форума Ответить с цитированием
Старый 15.02.2009, 17:18   #2
Sazary
В тени
Старожил
 
Аватар для Sazary
 
Регистрация: 19.12.2008
Сообщений: 5,788
По умолчанию

Цитата:
по идее максимальное число 9, их кол-во - 1, а программа пишет, что их 6
хм.. А у меня все работает..
Изображения
Тип файла: jpg 15_2_2009 17-16-34.jpg (15.5 Кб, 119 просмотров)
Вполне очевидно, чтобы что-то понять, необходимо книги читать.
Не нужно плодить бессмысленных тем. Вас Поиск избавит от многих проблем.

___________________________________ ___________________________________ _______
[=Правила форума=]_____[Поиск]_____[Литература по С++]____[Литература. Паскаль]
Sazary вне форума Ответить с цитированием
Старый 15.02.2009, 17:25   #3
kAND
Пользователь
 
Аватар для kAND
 
Регистрация: 30.11.2006
Сообщений: 15
По умолчанию

Хм... интересно. Дабы не быть голословным добавил аттачи.

P.S. Аналогичная программа без ввода элементов, работает нормально.
Вот текст:
Код:
#include <stdio.h>
#include <conio.h>
#include <math.h>
void main()
{
static int a[]={1,2,3,4,5,6,7,8,9,1,2,3,4,5,6};
int n=0,s=1,i;

clrscr();
for (i=0;i<=14;i++)
  {
  if (a[i]>a[s]) s=i;
  else  if (a[i]==a[s]) n++;
  }
printf("There are %d max values.\nMax value is: %d",n,a[s]);
getch();
}
Изображения
Тип файла: jpg 2009-02-15_202137.jpg (13.3 Кб, 119 просмотров)
Тип файла: jpg 2009-02-15_202700.jpg (13.8 Кб, 118 просмотров)

Последний раз редактировалось kAND; 15.02.2009 в 17:30.
kAND вне форума Ответить с цитированием
Старый 15.02.2009, 17:36   #4
Sazary
В тени
Старожил
 
Аватар для Sazary
 
Регистрация: 19.12.2008
Сообщений: 5,788
По умолчанию

Попробуйте так:
Код:
#include <stdio.h>
#include <conio.h>
int main()
{
int a[14];
int n=0,s=0,i;

printf("Enter elements of the array\n");
for (i=0;i<=14;i++)
  {
  scanf("%d",&a[i]);
  if (a[i]>a[s])
   {
    n=1;  // <-- Если нашли новый максимум, то он пока один
    s=i;
   }
  else
    if (a[i]==a[s]) n++;
  }
printf("There are %d max values.\nMax value is: %d",n,a[s]);
getch();
}
Кстати, присваивать n единицу при нахождении нового максимума по-любому надо.
Иначе будут ошибки при подобном вводе:
1 2 3 4 4 4 4 5 6 7 8 8 8 8 9 9
Вполне очевидно, чтобы что-то понять, необходимо книги читать.
Не нужно плодить бессмысленных тем. Вас Поиск избавит от многих проблем.

___________________________________ ___________________________________ _______
[=Правила форума=]_____[Поиск]_____[Литература по С++]____[Литература. Паскаль]

Последний раз редактировалось Sazary; 15.02.2009 в 17:38.
Sazary вне форума Ответить с цитированием
Старый 15.02.2009, 17:38   #5
kAND
Пользователь
 
Аватар для kAND
 
Регистрация: 30.11.2006
Сообщений: 15
По умолчанию

Цитата:
Сообщение от MaTBeu Посмотреть сообщение
Уберите амперсант в scanf
Хм... думаю с ним было лучше

2 Sazary, ответ выдает не верный n=1, max=7. Но за поправку в алгоритме спасибо, не учел
Изображения
Тип файла: jpg 2009-02-15_203621.jpg (13.6 Кб, 116 просмотров)

Последний раз редактировалось kAND; 15.02.2009 в 17:47.
kAND вне форума Ответить с цитированием
Старый 15.02.2009, 17:47   #6
Sazary
В тени
Старожил
 
Аватар для Sazary
 
Регистрация: 19.12.2008
Сообщений: 5,788
По умолчанию

Цитата:
Сообщение от kAND
ответ выдает не верный n=1, max=7
Может, у вас что-то с компилятором?
Все должно работать.
Изображения
Тип файла: jpg 15_2_2009 17-45-39.jpg (15.5 Кб, 111 просмотров)
Вполне очевидно, чтобы что-то понять, необходимо книги читать.
Не нужно плодить бессмысленных тем. Вас Поиск избавит от многих проблем.

___________________________________ ___________________________________ _______
[=Правила форума=]_____[Поиск]_____[Литература по С++]____[Литература. Паскаль]
Sazary вне форума Ответить с цитированием
Старый 15.02.2009, 17:56   #7
kAND
Пользователь
 
Аватар для kAND
 
Регистрация: 30.11.2006
Сообщений: 15
По умолчанию

Цитата:
Сообщение от Sazary Посмотреть сообщение
Может, у вас что-то с компилятором?
Все должно работать.
попробовал другим компилятором, результат тот же Попробую на другом компе, может дело в нем...
------------
нет, проблема не в компе
------------
Спасибо всем за помощь, буду разбираться в чем проблема, может найду причину. Если найду, отпишусь

Последний раз редактировалось kAND; 15.02.2009 в 18:02.
kAND вне форума Ответить с цитированием
Старый 15.02.2009, 18:16   #8
Sazary
В тени
Старожил
 
Аватар для Sazary
 
Регистрация: 19.12.2008
Сообщений: 5,788
По умолчанию

kAND Я компилю в MinGW.

Специально проверил в borland C++ 3.1.
Для
1 2 3 4 5 6 7 8 9 1 2 3 4 5 6
говорит, что максимум =7 (а количество 1).
Этого НЕ должно происходить и я не знаю почему так получается.

А вот вообще бред:
1 2 3 3 4 5 6 6 6 9 7 6 5 4 3
There are 2 max values.
Max value is: 3
=========

Код:
#include <stdio.h>
#include <conio.h>
int main()
{
clrscr();
int a[14];
int n=0,s=0,i;

printf("Enter elements of the array\n");
for (i=0;i<=14;i++)
  {
  scanf("%d",&a[i]);
  if (a[i]>a[s])
   {
  //  printf("a[%d]>a[%d]! a[%d]=%d, a[%d]=%d\n",i,s,i,a[i],s,a[s]);
  //  printf("n=%d, s=%d\n",n,s);
    n=1;  // <-- Если нашли новый максимум, то он пока один
    s=i;
   }
  else
    if (a[i]==a[s]) n++;
  }
printf("s= %d\n",s);
printf("There are %d max values.\ns=%d\nMax value is: %d",n,s,a[s]);
getch();
return 0;
}
Как видно из результата, индекс максимума он все-таки считает правильно.
Но, почему-то, выводить элемент массива с этим индексом не хочет.
==========
поправка:
все-таки проблема не только в этом.
Вполне очевидно, чтобы что-то понять, необходимо книги читать.
Не нужно плодить бессмысленных тем. Вас Поиск избавит от многих проблем.

___________________________________ ___________________________________ _______
[=Правила форума=]_____[Поиск]_____[Литература по С++]____[Литература. Паскаль]

Последний раз редактировалось Sazary; 15.02.2009 в 18:18.
Sazary вне форума Ответить с цитированием
Старый 15.02.2009, 18:16   #9
MaTBeu
Eclipse Foundation
Старожил
 
Аватар для MaTBeu
 
Регистрация: 19.09.2007
Сообщений: 2,604
По умолчанию

Сделайте пошаговую отладку. Выясните на каком этапе у вас ошибка.
----------------------------------------------------------
Мда... ошибка коварная... у вас цикл от 0 до 14(включительно), тоесть 15 итераций, а элементов всего 14
Код:
#include <stdio.h>
#include <conio.h>
int main()
{
clrscr();
int a[14];
int n=0,s=0,i;

printf("Enter elements of the array\n");
for (i=0;i<14;i++) <-----------вот тут ошибка (была)
  {
  scanf("%d",&a[i]);
  if (a[i]>a[s])
   {
  //  printf("a[%d]>a[%d]! a[%d]=%d, a[%d]=%d\n",i,s,i,a[i],s,a[s]);
  //  printf("n=%d, s=%d\n",n,s);
    n=1;  // <-- Если нашли новый максимум, то он пока один
    s=i;
   }
  else
    if (a[i]==a[s]) n++;
  }
printf("s= %d\n",s);
printf("There are %d max values.\ns=%d\nMax value is: %d",n,s,a[s]);
getch();
return 0;
}

Последний раз редактировалось MaTBeu; 15.02.2009 в 18:21.
MaTBeu вне форума Ответить с цитированием
Старый 15.02.2009, 18:25   #10
Sazary
В тени
Старожил
 
Аватар для Sazary
 
Регистрация: 19.12.2008
Сообщений: 5,788
По умолчанию

MaTBeu Да, действительно, ошибка коварная )

Кстати, хотелось бы заметить, что в Dev-Cpp работает даже в таком виде.(даже если максимальный элемент будет 14-м)
Вполне очевидно, чтобы что-то понять, необходимо книги читать.
Не нужно плодить бессмысленных тем. Вас Поиск избавит от многих проблем.

___________________________________ ___________________________________ _______
[=Правила форума=]_____[Поиск]_____[Литература по С++]____[Литература. Паскаль]
Sazary вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Задача по работе с массивом... ЕвгенийОлегович Помощь студентам 1 20.05.2008 22:36
Проблема при работе с БД HAMMAN БД в Delphi 3 29.03.2008 14:42
проблема при работе с несколькими исходными файлами Grind Помощь студентам 2 19.02.2008 19:37
Проблема с параметрами при работе С ADO А. Долматов БД в Delphi 22 30.11.2007 08:47
Проблема при работе с представлениями Nemec БД в Delphi 2 29.07.2007 04:21