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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 30, средняя оценка - 4.63
Лена
0 / 0 / 0
Регистрация: 18.12.2007
Сообщений: 4
#1

Нахождение общих элементов двух массивов - C++

18.12.2007, 12:34. Просмотров 3784. Ответов 16
Метки нет (Все метки)

Дали задачу на курсовую, а я в С++ вообще балда, помогите задачку написать, плз!
Условие такое:
Нахождение общих элеменвто двух массивов.
Для двух массивов различной размерности найти элементы имеющие одинаковое значение и одинаковое по модулю значение. Вывести результаты на экран и записать в файл "output.txt".
Помогите, пожалуйста, буду очень благодарна.:'(:'(
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
18.12.2007, 12:34     Нахождение общих элементов двух массивов
Посмотрите здесь:

C++ Сравнение элементов двух двумерных массивов
Сравнение элементов двух двумерных массивов C++
Объявить массив не более чем 15 элементов. Вывести обратные по модулю величины и проверить изменились ли адреса элементов этих двух массивов. C++
C++ Одномерные массивы: нахождение элементов массивов X и Y, пользуясь формулами
C++ Работа с массивами в С++ . Поиск общих элементов двух массивов
C++ Нахождение суммы общих делителей чисел
C++ Сравнение элементов двух массивов
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Lord_Voodoo
Супер-модератор
8577 / 2177 / 61
Регистрация: 07.03.2007
Сообщений: 10,863
Завершенные тесты: 1
18.12.2007, 12:56     Нахождение общих элементов двух массивов #2
это точно задание на курсовую? по-моему, лаба обычная, позже по свободе наваяю
Лена
0 / 0 / 0
Регистрация: 18.12.2007
Сообщений: 4
18.12.2007, 16:44  [ТС]     Нахождение общих элементов двух массивов #3
Ну я первый курс. Да, задание на курсовую. Мне ещё уже в четверг сдавать, а я ещё ничего не делала...:huh:
Lord_Voodoo
Супер-модератор
8577 / 2177 / 61
Регистрация: 07.03.2007
Сообщений: 10,863
Завершенные тесты: 1
18.12.2007, 18:07     Нахождение общих элементов двух массивов #4
ну что-то вроде этого....
Код
#include <iostream>
#include <math.h>
#include <stdio.h>
int main()
{
   int *arr1;
   int *arr2;
   int n = 0, k = 0;
   std::cout << "Enter razmer first array!" << std::endl;
   std::cin >> n;
   arr1 = new int[n];
   std::cout << "Enter array!" << std::endl;
   for(int i = 0; i < n; i++) std::cin >>arr1[i];
   std::cout << "Enter razmer second array!" << std::endl;
   std::cin >> k;
   arr2 = new int[k];
   std::cout << "Enter array!" << std::endl;
    FILE *stream;
    stream = fopen("Out.txt", "w+");
   for(int i = 0; i < k; i++) std::cin >>arr2[i];
   // Vivod
   printf("Result:\n");
   fprintf(stream, "Result:\n");
   printf(" eql:\n");
   for(int i = 0; i < n; i++){
      for(int j = 0; j < k; j++){
        if(arr1[i] == arr2[j]){
          printf("  a1[%d] = a2[%d]\n", i, j);
          fprintf(stream, "  a1[%d] = a2[%d]\n", i, j);
        }
      }
   }
   printf(" abs:\n");
   fprintf(stream, "abs:\n");
   for(int i = 0; i < n; i++){
      for(int j = 0; j < k; j++){
        if(abs(arr1[i]) == abs(arr2[j])){
          printf("  a1[%d] = a2[%d]\n", i, j);
          fprintf(stream, "  a1[%d] = a2[%d]\n", i, j);
        }
      }
    }
    fclose(stream);
   return 0;
}
Лена
0 / 0 / 0
Регистрация: 18.12.2007
Сообщений: 4
18.12.2007, 19:14  [ТС]     Нахождение общих элементов двух массивов #5
ПАСИБО золотой ты мой!! чмок чмок тебя....покажу своему преподу...
Лена
0 / 0 / 0
Регистрация: 18.12.2007
Сообщений: 4
20.12.2007, 14:10  [ТС]     Нахождение общих элементов двух массивов #6
извините, а не могли бы вы мне ещё помочь. Препод говорит программа писана на С++ а надо на С. Если есть свободное время, помогите пожалуйста.
Lord_Voodoo
Супер-модератор
8577 / 2177 / 61
Регистрация: 07.03.2007
Сообщений: 10,863
Завершенные тесты: 1
20.12.2007, 14:22     Нахождение общих элементов двух массивов #7
Цитата Сообщение от Лена Посмотреть сообщение
извините, а не могли бы вы мне ещё помочь. Препод говорит программа писана на С++ а надо на С. Если есть свободное время, помогите пожалуйста.
а можно просветить, в чем же их отличия? что нельзя использовать?
./run
38 / 10 / 2
Регистрация: 06.12.2007
Сообщений: 133
20.12.2007, 19:06     Нахождение общих элементов двух массивов #8
Думаю имеется ввиду, что нужно заменить cin и cout на scanf и printf.
Lord_Voodoo
Супер-модератор
8577 / 2177 / 61
Регистрация: 07.03.2007
Сообщений: 10,863
Завершенные тесты: 1
21.12.2007, 09:38     Нахождение общих элементов двух массивов #9
ну тогда вот тебе другой вариант, хотя могла бы и сама заменить, все-таки на программера учишься:
Код
#include <iostream>
#include <math.h>
#include <stdio.h>
int main()
{
   int *arr1;
   int *arr2;
   int n = 0, k = 0;
   printf("Enter razmer first array:");
   scanf("%d", &n);
   arr1 = new int[n];
   printf("\nEnter array:\n");
   for(int i = 0; i < n; i++) scanf("%d", &arr1[i]);
   printf("\nEnter razmer second array:");
   scanf("%d", &k);
   arr2 = new int[k];
   printf("\nEnter array:\n");
   for(int i = 0; i < k; i++) scanf("%d", &arr2[i]);
    FILE *stream;
    stream = fopen("Out.txt", "w+");
   // Vivod
   printf("Result:\n");
   fprintf(stream, "Result:\n");
   printf(" eql:\n");
   for(int i = 0; i < n; i++){
      for(int j = 0; j < k; j++){
        if(arr1[i] == arr2[j]){
          printf("  a1[%d] = a2[%d]\n", i, j);
          fprintf(stream, "  a1[%d] = a2[%d]\n", i, j);
        }
      }
   }
   printf(" abs:\n");
   fprintf(stream, "abs:\n");
   for(int i = 0; i < n; i++){
      for(int j = 0; j < k; j++){
        if(abs(arr1[i]) == abs(arr2[j])){
          printf("  a1[%d] = a2[%d]\n", i, j);
          fprintf(stream, "  a1[%d] = a2[%d]\n", i, j);
        }
      }
    }
    fclose(stream);
   return 0;
}
igor_nf
118 / 12 / 1
Регистрация: 21.08.2007
Сообщений: 222
23.12.2007, 11:36     Нахождение общих элементов двух массивов #10
Во-первых убрать <iostream> - это приплюснутый инклюд. Во-вторых - убрать оператор new. Для динамического выделения памяти в Си используется malloc(). В-третьих, Си, в отличие от С++, не позволяет обьявить переменную в теле цикла.
Lord_Voodoo
Супер-модератор
8577 / 2177 / 61
Регистрация: 07.03.2007
Сообщений: 10,863
Завершенные тесты: 1
23.12.2007, 13:04     Нахождение общих элементов двух массивов #11
Цитата Сообщение от igor_nf Посмотреть сообщение
Во-первых убрать <iostream> - это приплюснутый инклюд. Во-вторых - убрать оператор new. Для динамического выделения памяти в Си используется malloc(). В-третьих, Си, в отличие от С++, не позволяет обьявить переменную в теле цикла.

я в глаза не видел компиляторов по си, у меня с++-компилер, вот и проги такие же... а на счет нет new, ты утверждаешь, что на си не было статических массивов?
igor_nf
118 / 12 / 1
Регистрация: 21.08.2007
Сообщений: 222
24.12.2007, 12:15     Нахождение общих элементов двух массивов #12
Цитата Сообщение от WooDooMan666 Посмотреть сообщение
я в глаза не видел компиляторов по си, у меня с++-компилер, вот и проги такие же... а на счет нет new, ты утверждаешь, что на си не было статических массивов?
new - это средство выделения памяти, которое имеет отношение только к С++ (в Сях такого нет). У Страуструпа это написано. Далее по поводу классов памяти. Может у нас разное понимание вещей... Статический класс памяти - количество блоков необходимой памяти заранее известно и может быть вычислено компилятором в момент компиляции. Блоки располагаются в специальной секции программы, которая называется секцией данных. Так это выглядит в Си:

Код
static char arr[1024];      //    резервирует килобайт в секции .data
Динамический класс памяти - количество блоков памяти заранее неизвестно и станет известно только в момент выполнения программы. Для этого, если мы пишем на Си - используем malloc(), а если мы пишем на C++ - используем new[]. Достоверной разницы в механизмах работы этих средств я не знаю, но Страуструп пишет, что если есть возможность использовать new, то лучше использовать new вместо malloc().

К теме: поэтому, если ты используешь new - у тебя сиплюснутый код, но не сишный.
Lord_Voodoo
Супер-модератор
8577 / 2177 / 61
Регистрация: 07.03.2007
Сообщений: 10,863
Завершенные тесты: 1
24.12.2007, 16:27     Нахождение общих элементов двух массивов #13
Цитата Сообщение от igor_nf Посмотреть сообщение
new - это средство выделения памяти, которое имеет отношение только к С++ (в Сях такого нет). У Страуструпа это написано. Далее по поводу классов памяти. Может у нас разное понимание вещей... Статический класс памяти - количество блоков необходимой памяти заранее известно и может быть вычислено компилятором в момент компиляции. Блоки располагаются в специальной секции программы, которая называется секцией данных. Так это выглядит в Си:

Код
static char arr[1024];      //    резервирует килобайт в секции .data
Динамический класс памяти - количество блоков памяти заранее неизвестно и станет известно только в момент выполнения программы. Для этого, если мы пишем на Си - используем malloc(), а если мы пишем на C++ - используем new[]. Достоверной разницы в механизмах работы этих средств я не знаю, но Страуструп пишет, что если есть возможность использовать new, то лучше использовать new вместо malloc().

К теме: поэтому, если ты используешь new - у тебя сиплюснутый код, но не сишный.

понятно, ну тогда переделаю под си, спасибо за информацию...
Lord_Voodoo
Супер-модератор
8577 / 2177 / 61
Регистрация: 07.03.2007
Сообщений: 10,863
Завершенные тесты: 1
24.12.2007, 16:36     Нахождение общих элементов двух массивов #14
Надеюсь, это уже больше похоже на си:
Код
#include <math.h>
#include <stdio.h>
#include <stdlib.h>
int main()
{
   int *arr1;
   int *arr2;
   int n = 0, k = 0;
   printf("Enter razmer first array:");
   scanf("%d", &n);
   arr1 = (int*) malloc(n * sizeof(int));
   printf("\nEnter array:\n");
   for(int i = 0; i < n; i++) scanf("%d", &arr1[i]);
   printf("\nEnter razmer second array:");
   scanf("%d", &k);
   arr2 = (int*) malloc(k * sizeof(int));
   printf("\nEnter array:\n");
   for(int i = 0; i < k; i++) scanf("%d", &arr2[i]);
    FILE *stream;
    stream = fopen("Out.txt", "w+");
   // Vivod
   printf("Result:\n");
   fprintf(stream, "Result:\n");
   printf(" eql:\n");
   for(int i = 0; i < n; i++){
      for(int j = 0; j < k; j++){
        if(arr1[i] == arr2[j]){
          printf("  a1[%d] = a2[%d]\n", i, j);
          fprintf(stream, "  a1[%d] = a2[%d]\n", i, j);
        }
      }
   }
   printf(" abs:\n");
   fprintf(stream, "abs:\n");
   for(int i = 0; i < n; i++){
      for(int j = 0; j < k; j++){
        if(abs(arr1[i]) == abs(arr2[j])){
          printf("  a1[%d] = a2[%d]\n", i, j);
          fprintf(stream, "  a1[%d] = a2[%d]\n", i, j);
        }
      }
    }
    fclose(stream);
    free(arr1);
    free(arr2);
   return 0;
}
Ensase
Флудер
191 / 29 / 5
Регистрация: 23.03.2007
Сообщений: 335
19.03.2008, 06:04     Нахождение общих элементов двух массивов #15
Цитата Сообщение от igor_nf Посмотреть сообщение
Си, в отличие от С++, не позволяет обьявить переменную в теле цикла.
в стандарте с99 позволяет.
igor_nf
118 / 12 / 1
Регистрация: 21.08.2007
Сообщений: 222
19.03.2008, 15:47     Нахождение общих элементов двух массивов #16
в стандарте с99 позволяет.
Верно, до стандартов то я и не дошёл ).
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
19.03.2008, 20:06     Нахождение общих элементов двух массивов
Еще ссылки по теме:

Нахождение двух наибольших элементов C++
Функция вывода на экран всех общих элементов двух одномерных массивов C++
C++ Поэлементное произведение элементов двух массивов
Построить вектор из общих элементов двух векторов C++
C++ Перенос элементов из двух массивов

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

Или воспользуйтесь поиском по форуму:
Ensase
Флудер
191 / 29 / 5
Регистрация: 23.03.2007
Сообщений: 335
19.03.2008, 20:06     Нахождение общих элементов двух массивов #17
abs - в stdlib.h, так что можно math.h не подключать.
Yandex
Объявления
19.03.2008, 20:06     Нахождение общих элементов двух массивов
Ответ Создать тему
Опции темы

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