Архив метки: листинг

SQL запрос Oracle поиска дубликатов по нескольким полям

sql Oracle поиск дубликатов

SQL запрос Oracle поиск дубликата записей по нескольким полям, можно использовать комбинацию функций GROUP BY и HAVING. Вот пример запроса:

SELECT field1, field2, field3, COUNT(*) AS count
FROM your_table
GROUP BY field1, field2, field3
HAVING COUNT(*) > 1;

В этом sql запросе вы должны заменить «your_table» на имя вашей таблицы, а «field1», «field2» и «field3» на имена полей, по которым вы хотите найти дубликаты.

Вы получите результат, в котором будут показаны значения полей и количество повторений. Только те записи, в которых количество повторений больше 1, будут включены в результат.

Через партиции

Для поиска дубликатов в Oracle можно использовать анализ партиций таблицы. Вот пример sql запроса, который может помочь вам найти дубликаты внутри партиций таблицы:

SELECT column1, column2, ..., columnN
FROM (
    SELECT column1, column2, ..., columnN,
        COUNT(*) OVER (PARTITION BY column1, column2, ..., columnN) AS duplicate_count
    FROM your_table
    )
WHERE duplicate_count > 1;

Замените your_table на имя вашей таблицы, а column1, column2, …, columnN на столбцы, по которым вы хотите искать дубликаты. Результатом будет список строк, содержащих дубликаты исходных данных.

Обратите внимание, что этот запрос проверяет дубликаты только в рамках партиций таблицы. Если вы хотите проверить все строки таблицы на дубликаты, вам нужно будет удалить часть (PARTITION BY column1, column2, ..., columnN).

Программное определение количества ядер на языке C/С++

Для программного определения количества ядер (процессоров)  в языке С++ в операционной системе Windows.

1 Способ

#include <stdio.h>
#include <stdlib.h>
#include <windows.h>

int main(void) {
    SYSTEM_INFO sysinfo;
    GetSystemInfo(&sysinfo);
    int CountProc=sysinfo.dwNumberOfProcessors);

    return 0;
}

2 Способ

#include <iostream> 
using namespace std; 
int main() 
{ 
    int CountProc = sysconf(_SC_NPROCESSORS_ONLN); 
}

Массив разных случайных чисел

С++Задача:

Заполнения массива случайными неповторяющимися элементами числами (язык Си)

Решение:

Алгоритм решения заполнения массива содержит три цикла: в первом цикле выбираем номер заполняемого элемента (переменная i); внутри первого цикла выполняется второй цикл (do…while), который будет выполняться еще раз, если потребуется повтор; внутри цикла (do…while) выполняются еще три действия: вычисляется значение нового элемента, переменной x задается значение «не повторять» и запускается третий цикл – сравнения вычисленного значения со всеми предыдущими (цикл for по переменной j).

Листинг решения:

#include <stdio.h>
#include <stdlib.h>
#include <locale.h>
#include <time.h>
#define N 20 //количество элементов в массиве
#define Povtor 1 //есть ли повторения

inline void rus() // Русификация вывода в консольное окно
{
setlocale( LC_CTYPE, ".1251" );
setlocale( LC_MONETARY, ".1251" );
}
void randomize()
{
srand(time(0));
}

unsigned int random(int range)
{
return (rand() % range);
}

int main()
{
char c[N];
int i, j, x,range;

rus();
randomize();
printf("Заполнение одномерного массива символами \n");
printf("в случайном порядке. Символы не должны повторяться. \n");
printf("Коды символов расположены в диапазоне от 33 до 90.\n");

range = 90-33+1;
*c=random(range) + 33; // Первый элемент

for (i=1;i<N; i++) // Цикл заполнения элементов,
{ // i – номер очередного элемента
do
{
*(c+i)=random(range) + 33; // Новое значение
x = !Povtor; // Считаем, что повтор поиска не нужен
for(j=0; j<i; j++) // Цикл сравнения со всеми предыдущими
if (*(c+i)==*(c+j))
{
x = Povtor; // Элементы совпали, надо повторить поиск
break;
}
}
while (x==Povtor);
}
// Вывод одномерного массива символов
printf("Распечатка массива \n");
for (i=1; i<N; i++) //заметьте еще раз, проверяется условие i<N
printf("%c",(*(c+i)));
return 0;
}

Можно также реализовать функцию, проверяющая повторился ли элемент y в массиве x или нет, к примеру может иметь следующий вид (считаем, что количество элементов в массиве x равно n).

Листинг примера функции для поиска повторяющегося элемента

int povtor(int *x, int n, int y)
{ int Povtor, i;
Povtor = 0;
for (i=0;i<n;i++) {if (x[i]==y) Povtor=1;}
return Povtor;
}

Строки в С++ Листинг программы

Тема: Строки

Задание: :  В 2-х предложениях найти и распечатать совпадающие слова.

Листинг

#include <string.h>
#include <stdio.h>
#include <stdlib.h>
#include <locale.h>
#include <windows.h>

#define N 20

  //  ПРЕДВАРИТЕЛЬНОЕ ОБЪЯВЛЕНИЕ ФУНКЦИЙ
  // Заголовок программы
      void Title();
  // Ввод предложения
      void InpPredl (char predl[]);
  // Ввод предложения
    void InpPredl(char predl[]);
      // Ввод предложения
    void InpPredl2(char predl[]);
  // Выделение из предложения
     void Select(const char *predl, char m[][N],char *sel, int *n);
  // Поиск повторов слов
     void FindDuplicate(char slova[][N], char slova2[][N], int sl, int rz);
  // Вывод результата
     void OutPredl(char *s1, char *s2);

inline void rus()  // Русификация вывода в консольное окно
{
    //setlocale( LC_CTYPE, ".1251" );
    //setlocale( LC_MONETARY, ".1251" );
    setlocale( LC_ALL, "" );
}

// ОСНОВНАЯ ФУНКЦИЯ
int main()
{
     // ОБЪЯВЛЕНИЕ ПЕРЕМЕННЫХ
  char predl[80];    // Введенное предложение
  char predl2[80];    // Введенное предложение
  char *res;            // Результирующее предложение
  char slova[N][N]; // Массив слов в предложении
  char slova2 [N][N]; // Массив 2 слов в предложении
  int  sl=-1, rz=-1;  // Счетчики слов
  char buk[80]; // все буквы алфавита
  char *bs="йцукенгшщзхъфывапролджэячсмитьбю";// Буквы строчные
  char *bz ="ЙЦУКЕНГШЩЗХЪФЫВАПРОЛДЖЭЯЧСМИТЬБЮ";/*  заглавные */
  char *r="`!;:,.?- _";         // Разделительные знаки
//ВЫЗОВ ФУНКЦИЙ НА ИСПОЛНЕНИЕ
    rus();
// Заголовок программы
       Title ();
  // Ввод предложения
       InpPredl(predl);
       InpPredl2(predl2);
  // Выделение из предложения слов
      Select (predl, slova, r, &sl);
      Select (predl2, slova2, r, &rz);

       FindDuplicate(slova, slova2, sl, rz);

    return 0;
}

// ОПИСАНИЕ ИСПЛЬЗУЕМЫХ ФУНКЦИЙ
// Заголовок программы
void Title()
{
  char s[1000];
  AnsiToOem(" Задание\n",s);
  puts (s);

}
// Ввод предложения
void InpPredl(char *s)
{
    char s2[50];
    AnsiToOem("Введите предложение \n",s2);
    puts(s2);
  strcpy (s,"Верите ли вы, что задача решена?");
  // gets (s);
}
void InpPredl2(char *s)
{
    char s2[50];
    AnsiToOem("Введите предложение \n",s2);
    puts(s2);
  strcpy (s,"Верите ли вы, во что нибудь?");
 // gets (s);

}

// Выделение из предложения
void Select(const char *predl, char m[][N], char *sel, int *n)
{
  char *p, *s;

  s=strdup (predl); // Сделать копию исходного предложения
	// так как передается константа, strtok требует
	// внесения изменений при своей работе
  p = strtok (s, sel);
  while (p)
    {
     (*n)++;
     strcpy (m[*n],p);
     p = strtok (NULL, sel);
    }
  free (s);
}
/ Сравнение слов
void FindDuplicate(char slova[][N], char slova2[][N], int sl, int rz)
{
  int i, j;
  char buk[80];
   i = sl; //кол во слов в 1 массиве слов
AnsiToOem("Повторы ",buk);
            puts (buk);



  while (i>=0)
    {
     for(j=0;j< =rz;j++)
      if (!strcmp(slova[i],slova2[j])) {
            AnsiToOem(slova[i],buk);
            puts (buk);
                                } // Печать слова
      i--;
    }

}

Листинг примера функций в языке Си.

Функции в языке Си.

Задание

Написать программу при помощи операторов цикла (без применения массивов и прямой адресации курсора) для распечатки на экране монитора указанного набора символов с использованием функций.

Набор символов

A D G J M
M D G J M
M J G J M
M J G J M
M J G D M
M J G D A

Листинг программы

#include <conio.h>
#include <stdio.h>

#include <windows.h>
//функция печати первой части строки 
void PartFirst(int countLine, char First)
{
   int i=1;
    do
	{
	  if (First< 'A') First='M';
	  printf ("%2c",First);
	  First--; First--; First--;
	  i++;
	} while (i<6-countLine+1);
}
//функция печати второй части строки 
void PartSecond(int countLine, char First)
{
   char newFirst=First;
   int i=1;
    do
	{
	  if (First>'M') First=newFirst;
	  printf ("%2c",First);
	  First++; First++; First++;
	  j++;
	} while (i< =countLine-1);
}
int main()
{
  int i,j,i1,j1;
  char c,c1,c2;
  char s[1000];
AnsiToOem("Задание: Написать программу, которая выводит на экран заданный набор" ,s);
puts(s);
c='A';
c1='A';
i1=6;
do
    {
c2='M';
if (i1<6)
   PartFirst(i1,c2);
j=1;
if (i1!=1)
  PartSecond(i1,cl);
c1+=3;
      printf ("\n");
i1--;
    }while (i1>=1);
  getch();
 return 0;
}