Массив Запись нового массива. - C (СИ)
Формулировка задачи:
Здраствуйте.
У меня такая проблема, в новом массиве n (функция zamena) записываются повторные вхождения и символы, которых не должно быть. Помогите пожалуйста.
Вот собственно задание:
В исходном массиве (размер 100 элементов), заполненном символами латинского алфавита и цифр, замените все повторные вхождения каждого символа пробелом, а все повторяющиеся символы поместите во второй массив. Выполните сортировку полученных массивов. Для контроля результата сделайте распечатку массивов, в том числе исходного.
#include <stdio.h> #include <windows.h> #define N 10 char RandomFill(char a[N]) { char c,k,i; for (i=0;i<=N;i++) { k=0; do { c=rand()%255; if ((c>='A' && c<='Z') || (c>='a' && c<='z') || (c>='0' && c<='9') ) a[i]=c,k=1; } while (k!=1); } } char print(char p[N]) { int i; for (i=0;i<=N;printf("%c",p[i]),i++); printf("\n\n"); } char zamena(char z[N], char n[]) { int i,j,k,m; k=-1; for (i=0;i<=N-1;i++) { m=0; for (j=i+1;j<=N;j++) { if (z[i]==' ') break; if (z[i]==z[j]) z[j]=' ',k++,n[k]=z[i],m=1; } if (m!=0) k++,n[k]=z[i],z[i]=' '; } } void main() { char Mas[N],NMas[N],str[50]; srand(time(0)); RandomFill(Mas); CharToOem("Исходный массив:\n",str); printf("%s",str); print(Mas); zamena(Mas,NMas); CharToOem("Массив без повторных вхождений:\n",str); printf("%s",str); print(Mas); CharToOem("Новый массив:\n",str); printf("%s",str); print(NMas); }
Решение задачи: «Массив Запись нового массива.»
textual
Листинг программы
#include <stdio.h> #include <windows.h> #define N 20 char RandomFill(char a[N]){ char c, k, i; for (i=0; i<N; i++){ k=0; do{ c=rand()%255; if((c>='A' && c<='Z') || (c>='a' && c<='z') || (c>='0' && c<='9') )a[i]=c, k=1; } while (k!=1); } } char print(char p[N]){ int i; for (i=0; i<N; i++){ if(p[i]=='\0') break; printf("%c", p[i]); } printf("\n\n"); } char zamena(char z[N], char n[N]){ int i, j, k=-1; for (i=0; i<N; i++){ for (j=i+1; j<N; j++){ if (z[i]==' ') break; if (z[i]==z[j]) z[j]=' ', k++, n[k]=z[i]; } } n[k+1]='\0'; } void sort(char mas[N]){ char tmp; int i, j; for(i=0; i<N; i++){ tmp=mas[i]; for(j=i-1; j>=0&&mas[j]>tmp; --j){ mas[j+1]=mas[j]; } mas[j+1]=tmp; } } int main(){ char Mas[N], NMas[N], str[50]; srand(time(0)); RandomFill(Mas); sort(Mas); CharToOem("Исходный массив:\n", str); printf("%s", str); print(Mas); zamena(Mas, NMas); sort(Mas); CharToOem("Массив без повторных вхождений:\n", str); printf("%s", str); print(Mas); CharToOem("Новый массив:\n", str); printf("%s", str); print(NMas); return 0; }
Объяснение кода листинга программы
- Объявлены функции:
RandomFill
print
zamena
sort
main
и массивы:Mas
NMas
str
- В функции
main
инициализированы массивыMas
иNMas
. - Вызвана функция
RandomFill
, которая случайным образом заполняет массивMas
символами из диапазона от 'A' до 'Z', от 'a' до 'z' и от '0' до '9'. - Вызвана функция
sort
, которая сортирует массивMas
в порядке возрастания. - С помощью функции
CharToOem
в буферstr
преобразованы символы строкиИсходный массив:
. - В консоль выведено содержимое буфера
str
с помощью функцииprintf
. - Вызвана функция
print
, которая выводит на экран содержимое массиваMas
. - Вызвана функция
zamena
, которая удаляет повторяющиеся элементы из массиваMas
и добавляет их в массивNMas
. - Вызвана функция
sort
, которая сортирует массивMas
в порядке возрастания. - С помощью функции
CharToOem
в буферstr
преобразованы символы строкиМассив без повторных вхождений:
. - В консоль выведено содержимое буфера
str
с помощью функцииprintf
. - Вызвана функция
print
, которая выводит на экран содержимое массиваMas
. - С помощью функции
CharToOem
в буферstr
преобразованы символы строкиНовый массив:
. - В консоль выведено содержимое буфера
str
с помощью функцииprintf
. - Вызвана функция
print
, которая выводит на экран содержимое массиваNMas
. - Программа завершена, возвращено значение 0.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д