5 / 5 / 3
Регистрация: 28.02.2010
Сообщений: 166
1

Количество изменений знака в каждой строке массива

27.10.2010, 13:20. Показов 1228. Ответов 8
Метки нет (Все метки)

Дано файл в котором записана прямоугольная матрица целых чисел.Для каждой строки подсчитать количество изменений знаков и вывести ее в результирующий файл.

Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
var
  a: array[1..100, 1..100] of integer;
  i, j, n, m,k: integer;
  f: text;
 
begin
  assign(f, 'in.txt');
  reset(f);
  for i := 1 to n do
  begin
  for j:=1 to m do 
  begin
    k := 0;
    if a[i, j] < 0 then 
      dec(k)
    else inc(k);
    writeln(abs(k));
    readln;
    close(f);
  end;
end;
end.
Вот написал программу которая считывает массив с файла и выводит ответ на экран.
Как это сделать во всем файле понятно.Но как в каждой строке нет(
Заранее спасибо.
__________________
Помощь в написании контрольных, курсовых и дипломных работ здесь
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
27.10.2010, 13:20
Ответы с готовыми решениями:

Количество изменений знака +/- в столбце
Необходимо подсчитать кол-во изменений знака + на - и на оборот в одном столбце. подробнее в...

Найти количество изменений знака в последовательности
Задана последовательность целых чисел. Найти количество изменений знака в ней. Нужна программа на...

Подсчитать количество изменений знака во введенной последовательности
Ввести последовательность чисел, количество которых заранее неизвестно. Последовательность чисел...

Используя функцию, составить программу, которая считает количество изменений знака в массиве чисел. y=f(x). В С++
Используя функцию, составить программу, которая считает количество изменений знака в массиве чисел....

8
Почетный модератор
64073 / 47484 / 32734
Регистрация: 18.05.2008
Сообщений: 115,185
27.10.2010, 14:58 2
Цитата Сообщение от maSt Посмотреть сообщение
Вот написал программу которая считывает массив с файла и выводит ответ на экран
Неужели и считывает и выводит?
Для начала, откуда программа знает чему равны n,m?

Добавлено через 1 минуту
И как это Вы 1 раз открыв файл ухитряетесь его много раз закрывать?
0
5 / 5 / 3
Регистрация: 28.02.2010
Сообщений: 166
27.10.2010, 15:35  [ТС] 3
Забыл
Pascal
1
read(n,m);
дописать. Закрытие файла уже поставил вне цикла,так что закрывать должно один раз.
При запуске считывает массив с файла и выводит на экран k.Но пока что k просто показывает позитивны или негативные числа в массиве. А как посчитать сколько раз изменяется в строке пока не получается
0
Почетный модератор
64073 / 47484 / 32734
Регистрация: 18.05.2008
Сообщений: 115,185
27.10.2010, 15:39 4
А как посчитать сколько раз изменяется в строке пока не получается
А ноли есть в матрице, или могут быть?
0
5 / 5 / 3
Регистрация: 28.02.2010
Сообщений: 166
27.10.2010, 15:43  [ТС] 5
Могут быть. Но ведь при
Pascal
1
a[i,j]=0
нужно просто увеличить счетчик изменений знака. Как мне кажется
0
Почетный модератор
64073 / 47484 / 32734
Регистрация: 18.05.2008
Сообщений: 115,185
27.10.2010, 15:54 6
Нет, мне кажется ноль не считается сменой знака, его нужно пропускать.
Если до и после ноля разные знаки, считаем, если одинаковые, то вроде нет, например
2 0 3 смены знака вроде бы нет.

Добавлено через 2 минуты
Я бы сначала удалил из строки матрицы все ноли, а затем считал бы смены знака так
Pascal
1
2
3
k:=0;
for i:=2 to n do
if a[i,j]*a[i,j-1]<0 then k:=k+1;
Добавлено через 4 минуты
Вот на примере линейного массива, та же строка матрицы

Pascal
1
2
3
4
5
6
7
8
9
10
11
12
i:=1;
while i<=n do
if a[i]=0 then
 begin
  for j:=i to n-1 do
  a[j]:=a[j+1];
  n:=n-1;
 end
else i:=i+1;
k:=0;
for i:=2 to n do
if a[i]*a[i-1]<0 then k:=k+1;
0
5 / 5 / 3
Регистрация: 28.02.2010
Сообщений: 166
27.10.2010, 15:58  [ТС] 7
Теперь выдает такое:
Ошибка времени выполнения. Индекс находился вне границ массива.
Из-за чего может выдавать эту ошибку?
Компилировал в ABC Pascal.
0
Почетный модератор
64073 / 47484 / 32734
Регистрация: 18.05.2008
Сообщений: 115,185
27.10.2010, 16:08 8
Pascal
1
2
3
while i<=n do
...............
a[j]:=a[j+1];//вот здесь, Турбо Паскаль это разрешает, а АВС нет
Попробуй так
Pascal
1
2
3
4
5
6
7
8
9
10
i:=1;
while i<n do
if a[i]=0 then
 begin
  for j:=i to n-1 do
  a[j]:=a[j+1];
  n:=n-1;
 end
else i:=i+1;
if a[n]=0 then n:=n-1;
Добавлено через 2 минуты
Как ни странно, у меня первый вариант АВС нормально пропускает...
1
5 / 5 / 3
Регистрация: 28.02.2010
Сообщений: 166
27.10.2010, 16:08  [ТС] 9
Спасибо все работает
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
27.10.2010, 16:08

Определить количество слов в каждой строке, сжать каждую строку, удалив END в каждой строке
Выполнить обработку текста из внешнего текстового файла, созданного в редакторе ....

Дописать в файл количество строк, символов в каждой строке, чисел в каждой строке
Дан текстовый файл.Дописать в его конец следующие данные: количество строк, количество символов в...

Подсчитать количество чётных чисел в каждой строке массива
Дан массив С(N,N). Подсчитать: а). Количество чётных чисел в каждой строке массива. б). Количество...

Найти количество четных чисел в каждой строке массива
ПОМОГИТЕ ПОЖАЛУЙСТА!!!!!! мне надо найти количество четных чисел в каждой строке массива в...


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

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Опции темы

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