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

чему нас учат в институте %) - C++

Восстановить пароль Регистрация
 
cibertronic
 Аватар для cibertronic
255 / 142 / 13
Регистрация: 27.12.2009
Сообщений: 893
07.01.2010, 00:04     чему нас учат в институте %) #1
тут такая вот ситуация нашел пару ошибок в одной из предоставленных задач и их решений в своей методичке по С++, а именно:
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
#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
void main()
{
const int N1=100;
int i,n,p,fl;
float a[N1],d;
printf(" vvedite 4islo elementov massiva: \n");
scanf("%d",&n);
printf("\n vvedite elementi massiva: \n");
for(i=0;i<n;i++)
{
printf("\n vvedite %d-j element massiva: ",i+1);
scanf("%f",&a[i]);
}
printf("\n Ishodnyj massiv:\n");
for(i=0;i<n;i++)
printf("%7.2f",a[i]);
do
{
fl=1;
for(i=0;i<n-1;i++)
if(a[i]>a[i+1])
{
d=a[i];
a[i]=a[i+1];
a[i+1]=d;
fl=0;
}
}
while(!fl);
printf("\n obrabotannyj massiv:\n");
for(i=0;i<n;i++)
printf("%7.2f",a[i]);
getch();
}
в седьмой строке указана переменная p которая должна была быть произведением всех элементов массива, но как я уже потом допетрил произведения нет, точнее я понял что переменная есть но не используется, перечитал - произведение, ладно...пусть не будет! в двадцатьтретьей строке еще одна ошибка. я раз 20 перечитал по буквам вверх и вниз, ну все как в методичке. если б не случайность, я б наверно никогда б и не нашел -1этот.
вот теперь не могу разобраться с такой задачей
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
void main()
{
const int N1=100;
int a[N1],i,n,s;
printf("\n Vvedite 4islo elementov massiva: ");
scanf("%d",&n);
randomize();
for(i=0;i<n;i++)
a[i]=random(10);
printf("\n Polu4ennyj massiv:\n\n");
for(i=0;i<n;i++)
printf("%5d",a[i]);
s=0;
for(i=0;i<n;i++);
s=s+a[i];
printf("\ns=%5d",s);
getch();
}
где здесь ошибка, хотя далее та же задача в варианте с указателями прекрасно работает
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
void main()
{
const int N1=100;
int a[N1],*ptr,n,s;
printf("\n vvedite 4islo elementov massiva: ");
scanf("%d",&n);
randomize();
for(ptr=a;ptr-a<n;ptr++)
*ptr=random(10);
printf(" polu4ennyj massiv:\n");
for(ptr=a;ptr-a<n;ptr++)
printf("%5d",*ptr);
s=0;
for(ptr=a;ptr-a<n;ptr++)
s=s+*ptr;
printf("\n s=%5d",s);
getch();
}
помогите понять где ошибка, почему не так... может в будущем буду лучше понимать массивы
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
07.01.2010, 00:04     чему нас учат в институте %)
Посмотрите здесь:

Как писать в привычных для нас окнах? C++
Разветвляющиеся вычислительные процессы наС++ C++
у нас есть число.МЫ не знаем его длины.Как обратиться к первому элементу?? C++
C++ Преобразовать строку, записав адрес прававильно: <область>, <нас. пункт>, <улица>, <дом / квартира>, <индекс>
C++ Источник, где учат писать оконный интерфейс на с++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Delphin_KKC
UNIX-way
 Аватар для Delphin_KKC
710 / 494 / 17
Регистрация: 15.01.2009
Сообщений: 1,721
07.01.2010, 00:24     чему нас учат в институте %) #2
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
void main()
{
const int N1=100;
int a[N1],i,n,s;
printf("\n Vvedite 4islo elementov massiva: ");
scanf("%d",&n);
randomize();
for(i=0;i<n;i++)
a[i]=random(10);
printf("\n Polu4ennyj massiv:\n\n");
for(i=0;i<n;i++)
printf("%5d",a[i]);
s=0;
for(i=0;i<n;i++) //тут в конце строки была лишняя точка с запятой
s=s+a[i];
printf("\ns=%5d",s);
getch();
}
accept
4837 / 3236 / 165
Регистрация: 10.12.2008
Сообщений: 10,682
07.01.2010, 02:46     чему нас учат в институте %) #3
Цитата Сообщение от cibertronic
если б не случайность, я б наверно никогда б и не нашел -1этот
нормальный -1 - не даёт вылезти за край массива

Цитата Сообщение от cibertronic
p которая должна была быть произведением всех элементов массива
записана она не там, так как элементы вещественные
произведение тоже вещественное получится (если его сделать в том же цикле, что в восемнадцатой строке)
ISergey
07.01.2010, 03:16
  #4

Не по теме:

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

cibertronic
 Аватар для cibertronic
255 / 142 / 13
Регистрация: 27.12.2009
Сообщений: 893
07.01.2010, 03:17  [ТС]     чему нас учат в институте %) #5
Цитата Сообщение от cibertronic Посмотреть сообщение
в двадцатьтретьей строке еще одна ошибка. я раз 20 перечитал по буквам вверх и вниз, ну все как в методичке. если б не случайность, я б наверно никогда б и не нашел -1этот.
когда я убрал это то все отлично заработало, а за край массива константа N1 не даст вылезти
accept
4837 / 3236 / 165
Регистрация: 10.12.2008
Сообщений: 10,682
07.01.2010, 06:58     чему нас учат в институте %) #6
C
1
2
for(i=0;i<n-1;i++)
if(a[i]>a[i+1])
видишь там i+1
будет сравнение на последнем шаге a[n-1] > a[n]
элемента a[n] нету
поэтому сделано, чтобы на последнем шаге было a[n-2] > a[n-1]

Цитата Сообщение от cibertronic
а за край массива константа N1 не даст вылезти
это если n маленкое, но ничто не мешает ввести n равное N1

дело даже не в этом
Цитата Сообщение от cibertronic
когда я убрал это то все отлично заработало
если обнулить массив, вот это ноль за краем должен будет в начало установиться
Yandex
Объявления
07.01.2010, 06:58     чему нас учат в институте %)
Ответ Создать тему
Опции темы

Текущее время: 06:44. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru