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

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

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 06.01.2015, 18:10   #1
vladden123
Пользователь
 
Регистрация: 05.01.2015
Сообщений: 11
По умолчанию Дан целочисленный массив . Определить, сколько в нем пар соседних одинаковых элементов.

Элементы считаются соседними, если их индексы в столбцах и/или в строках различаются не более чем на единицу.
Код:
#include <stdio.h>
#include <stdlib.h>


#define n 5
#define m 3

int main()
{
    int a[n][m],i=0,j=0,k=0;
    
    for(i=0;i<n;i++)
        for(j=0;j<m;j++)
        scanf("%d",&a[i][j]);


    for(i=0;i<n;i++)
    {
        for(j=0;j<m;j++)
        {
         printf("%d\t",a[i][j]);
        }

         printf("\n");

    }



for(i=0;i<n-1;i++)
{

    for(j=0;j<m;j++)
       {
        if(a[i][j]=a[i+1][j])k++;
       }
}




for(i=0;i<n;i++)
{
    for(j=0;j<m-1;j++)
        {
            if(a[i][j]=a[i][j+1])k++;
        }
}
    printf("\n");
    if(k>0)printf("kolichestvo sosednih odinakovih elementov = %d",k);
        else
        printf("sosednih odinakovih elementov net");
 printf("\n");






    system("pause");
    return 0;

}
Добрый вечер. Собственно, не правильно считает количество, а именно при любой введённой матрице он выдает максимально возможное количество таких пар элементов. В чем ошибка?

Последний раз редактировалось vladden123; 06.01.2015 в 18:13.
vladden123 вне форума Ответить с цитированием
Старый 06.01.2015, 18:24   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
В чем ошибка?
А что ты подразумеваешь под словом "индексы" В данном случае?
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 06.01.2015, 18:30   #3
vladden123
Пользователь
 
Регистрация: 05.01.2015
Сообщений: 11
По умолчанию

ну.. [0][0],[0][1] и т.д.
vladden123 вне форума Ответить с цитированием
Старый 06.01.2015, 18:45   #4
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Или я чего-то недопонимаю, или фраза "при любой введённой матрице он выдает максимально возможное количество таких пар" говорит при таком понятии о абсолютно верной работе программы. Количество соседних индексов по идее будет n*m, и будет постоянно для любой матрицы такого порядка.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 06.01.2015, 18:53   #5
vladden123
Пользователь
 
Регистрация: 05.01.2015
Сообщений: 11
По умолчанию

нужно, чтобы в переменную к записывалось количество ОДИНАКОВЫХ соседних элементов, а не сколько всего соседних элементов)
Например, если у меня матрица:
1 1 1
2 3 4
5 6 7

Должно вывести 2 таких пары ( в 1 строке 2 соседние пары с одинаковыми элементами ).

Последний раз редактировалось vladden123; 06.01.2015 в 18:56.
vladden123 вне форума Ответить с цитированием
Старый 06.01.2015, 19:44   #6
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Так тогда твоя заадча должна была звучать примерно так: "Вычислить кол-во соседей, при условии что их значения одинаковы и расстояние между ними не более единицы"
Тогда получается так:
Код:
int c=0,i,j;
for(i=0;i<n-1;i++) for(j=0;j<n-1;j++){
 c+=(a[i][j]==a[i][j+1] || a[i][j]==a[i+1][j])?1:0;
}
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 06.01.2015, 20:00   #7
vladden123
Пользователь
 
Регистрация: 05.01.2015
Сообщений: 11
По умолчанию

К сожалению, работает неправильно.
Например, при матрице :
2 2
2 2

Количество пар всего 1.
vladden123 вне форума Ответить с цитированием
Старый 06.01.2015, 20:09   #8
Aleksander550
Форумчанин
 
Регистрация: 07.01.2014
Сообщений: 124
По умолчанию

Цитата:
Код:


int c=0,i,j;
for(i=0;i<n-1;i++) for(j=0;j<n-1;j++){
c+=(a[i][j]==a[i][j+1] || a[i][j]==a[i+1][j])?1:0;
}
у вас нет проверки для последней строки и столбца например:
Код:
const int n = 5;
int array[n][n] = {1,2,3,4,5,
			 6,7,8,9,5,
			 1,2,3,4,5,
			 6,7,8,9,5,
			 5,5,5,5,5};
ваш код выдаст 0 совпадений,
надо добавить:
Код:
 for (int i = 0; i < n -1; i++) {
		if (array[i][n - 1] == array[i + 1][n - 1])
			с++;
	}
 //проверка последней строчки
 for (int j = 0; j < n -1; j++) {
		if (array[n - 1][j] == array[n - 1][j + 1])
			с++;
	 }
#define TRUE FALSE //счастливой отладки
Aleksander550 вне форума Ответить с цитированием
Старый 06.01.2015, 20:17   #9
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

А так:
Код:
c+=(a[i][j]==a[i][j+1]) + (a[i][j]==a[i+1][j]);
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 06.01.2015, 20:32   #10
Aleksander550
Форумчанин
 
Регистрация: 07.01.2014
Сообщений: 124
По умолчанию

Цитата:
А так:
Код:


c+=(a[i][j]==a[i][j+1]) + (a[i][j]==a[i+1][j]);
Какой цикл вы имели ввиду?
Если в цикле:
Код:
 for (int i = 0; i < n - 1; i++) {
	 for (int j = 0; j < m - 1; j++) {
                c+=(a[i][j]==a[i][j+1]) + (a[i][j]==a[i+1][j]);
		}
	 }
тоже последние столбцы и строки не будут обрабатываться, если:
Код:
 for (int i = 0; i < n ; i++) {
	 for (int j = 0; j < m ; j++) {
                c+=(a[i][j]==a[i][j+1]) + (a[i][j]==a[i+1][j]);
		}
	 }
можно выйти за пределы массива.
Поэтому проверку последнего столбца и строки я предложил делать через отдельные циклы.
#define TRUE FALSE //счастливой отладки
Aleksander550 вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Дан целочисленный массив размера N. Найти максимальное количество его одинаковых элементов. nadyaH Помощь студентам 10 20.03.2014 10:15
код из Паскаля в Delphi (Дан целочисленный массив A. Переписать в новый массив В элементы с порядковыми номерами, кратными трём ALEXandr20333 Помощь студентам 8 27.02.2014 11:27
Дан целочисленный массив размера N. Определить максимальное количество его одинаковых элементов. cheburashkaRF PHP 10 03.02.2014 12:35
Дано предложение. Определить, сколько в нем одинаковых соседних букв. mimit Помощь студентам 9 07.12.2012 20:36
Дан целочисленный массив размера N, содержащий ровно два одинаковых элемента. Найти номера одинаковых элементов и вывести эти номе Alexar Makken Паскаль, Turbo Pascal, PascalABC.NET 1 23.12.2011 22:07