Массив, функия и bool - C (СИ)
Формулировка задачи:
Здравствуйте. Мое активное изучение языка С продолжается.
Снова вопрос мой связан с функциями. Но теперь уже с совсем другим типом переменных: bool.
условие:
Написал сам код, но почему-то постоянно выводит "Есть совпадения". Помогите исправить ошибки:
и еще, правильно ли я сделал проверку наличия одинаковых элементов в массивах? Не обязательно стоящих на одинаковых позициях в массивах?
Разработать подпрограмму, которая возвращает значение TRUE, если в двух заданных одномерных массивах нет равных элементов (не обязательно стоящих на одинаковых позициях в массивах), и значение FALSE в против-ном случае. Программа с помощью этой подпрограммы должна проверять наличие одинаковых элементов в массивах, и в случае обнаружения таковых печатать на экране «Есть совпадения», в противном случае печатать «Совпадений не обнаружено».
#include <iostream>
#include <iomanip>
#include <windows.h>
using namespace std;
bool f(double *A,double *B,int g,int h) // проверяем наличие одинаковых элементов в массивах
{
for(int j=0; j<g; j++)
{
for(int i=0; i<h; i++)
{ if (A[j]=B[i])
{
return true;
}
}}
else
return false;
}
int main()
{
int i,g,j;
const int ui(20);
double arrP[ui],arrB[ui];
printf("\nКол-во элементов массива P: ");
scanf("%d",&g);
printf("\nКол-во элементов массива B: ");
scanf("%d",&j);
printf("\nВведите массив P: ");
for (i=0;i<g;i++)
{
printf("\nP[%d]: ",i);
scanf("%lf",&arrP[i]);
}
printf("\nВведите массив B: ");
for (i=0;i<j;i++)
{
printf("\nB[%d]: ",i);
scanf("%lf",&arrB[i]);
}
printf("\nВведенный массив P:\n ");
for (i=0;i<g;i++)
{
printf("%4.3lf ",arrP[i]);
}
printf("\nВведенный массив B:\n");
for (i=0;i<j;i++)
{
printf("%4.3lf ",arrB[i]);
}
if (f(arrP,arrB,g,j)==true)
{
printf("\n\nЕсть совпадения\n\n");
}
else
{
printf("\n\nСовпадений не обнаружено\n\n");
}
return 0;
}Решение задачи: «Массив, функия и bool»
textual
Листинг программы
#include "stdio.h"
#define ARR_SIZE 5
/* проверяем наличие одинаковых элементов в массивах */
int f(double *A,double *B,int g,int h)
{
int i, j;
for(j = 0; j < g; ++j)
for(i = 0; i < h; ++i)
if( A[j] == B[i] )
return 1;
return 0;
}
int main(void)
{
double arr1[ARR_SIZE] = {1, 2, 3, 4, 5};
double arr2[ARR_SIZE] = {6, 7, 2, 9, 10};
int i;
puts("Массив №1:");
for(i = 0; i < ARR_SIZE; ++i)
printf(" %.1f", arr1[i]);
puts("\nМассив №2:");
for(i = 0; i < ARR_SIZE; ++i)
printf(" %.1f", arr2[i]);
if( f(arr1, arr2, ARR_SIZE, ARR_SIZE) )
puts("\nЕсть совпадения!");
else
puts("\nСовпадений не обнаружено!");
return 0;
}
Объяснение кода листинга программы
- Объявление функции
f, которая принимает три аргумента типаdouble*и два целочисленных аргумента. - Внутри функции объявлены две переменные
iиjдля циклов. - Выполняются два вложенных цикла, которые сравнивают элементы массивов
AиBи возвращают1, если найдено совпадение, и0в противном случае. - В функции
mainобъявлены два массиваarr1иarr2типаdoubleс пятью элементами каждый. - Выполняется цикл, который выводит элементы массива
arr1на экран. - Выполняется цикл, который выводит элементы массива
arr2на экран. - Вызывается функция
fс аргументамиarr1,arr2,ARR_SIZEиARR_SIZE. - В зависимости от результата функции
fвыводится сообщение об обнаружении или отсутствии совпадений. - Функция
mainвозвращает0, завершая работу программы.