Другие языки программирования и технологии
Помогите плиз с массивом по паскалю!!))никак не могу решить(((
Текст задачи: Исключение из массива всех пробелов и запятых со сдвигом остающихся элементов массива на освободившиеся места. Исходный массив длиной N символов (где N не больше 100 вводится из текстового файла). Вывод в файл исходного и обработанного массивов. Тип: символьный.
uses crt;
const u=[' ',','];//симолы для удаления
var f,g:text;
n,i,j:byte;
name:string;
a:array[1..100] of char;
begin
clrscr;
write('Имя файла для чтения: ');
readln(name);
name:=name+'.txt';
assign(f,name);
{$I-} reset(f); {$I+}
if IOResult <> 0 then
begin
writeLn('Не могу открыть файл ',name);
writeLn('Работа программы завершена. Нажмите ENTER');
readln;
exit;
end;
write('Имя файла для записи: ');
readln(name);
name:=name+'.txt';
assign(g,name);
rewrite(g);
read(f,n);//читаем из файла размер массива
close(f);
writeln('Создайте символьный массив, включающий пробелы и запятые, размер массива=',n);
writeln(g,'Ishodnyj massiv:');
for i:=1 to n do
begin
write('a[',i,']=');
readln(a);//читаем символы
write(g,a);//записываем в файл
end;
i:=1;//сжимаем массив
while i<=n do//пока не конец массива
if a in u then//если пробел или запятая
begin
for j:=i to n-1 do
a[j]:=a[j+1];//сдвигаем конец массива к этому символу на 1
n:=n-1;//уменьшаем размер массива
end
else i:=i+1;//иначе идем вперед
writeln(g,'','');//пропускаем строку в файле
writeln(g,'Szatyj massiv:');
for i:=1 to n do
write(g,a);//записываем сжатый массив
close(g);
write('Массивы записаны в файл ',name);
readln
end.
const u=[' ',','];//симолы для удаления
var f,g:text;
n,i,j:byte;
name:string;
a:array[1..100] of char;
begin
clrscr;
write('Имя файла для чтения: ');
readln(name);
name:=name+'.txt';
assign(f,name);
{$I-} reset(f); {$I+}
if IOResult <> 0 then
begin
writeLn('Не могу открыть файл ',name);
writeLn('Работа программы завершена. Нажмите ENTER');
readln;
exit;
end;
write('Имя файла для записи: ');
readln(name);
name:=name+'.txt';
assign(g,name);
rewrite(g);
read(f,n);//читаем из файла размер массива
close(f);
writeln('Создайте символьный массив, включающий пробелы и запятые, размер массива=',n);
writeln(g,'Ishodnyj massiv:');
for i:=1 to n do
begin
write('a[',i,']=');
readln(a);//читаем символы
write(g,a);//записываем в файл
end;
i:=1;//сжимаем массив
while i<=n do//пока не конец массива
if a in u then//если пробел или запятая
begin
for j:=i to n-1 do
a[j]:=a[j+1];//сдвигаем конец массива к этому символу на 1
n:=n-1;//уменьшаем размер массива
end
else i:=i+1;//иначе идем вперед
writeln(g,'','');//пропускаем строку в файле
writeln(g,'Szatyj massiv:');
for i:=1 to n do
write(g,a);//записываем сжатый массив
close(g);
write('Массивы записаны в файл ',name);
readln
end.
мне кажется использовать функцию delete будет проще, если не ошибаюсь то она так же сдвигает позиции после удаления
И раз вы "не можете решить" то может приведете свой код? интересно посмотреть, что вы сваяли)
И раз вы "не можете решить" то может приведете свой код? интересно посмотреть, что вы сваяли)
Ну и в чем проблема?
1: объявляем переменную count:=0 ( Integer )
2: Делаем прогонку по массиву от 0 до до длинны строки.
3: ставим if, и просматривая итый элемент строки, сравниваем его код с одним из ASCII кодов пробела или запятой.
4: Если символ оказался пробелом или запятой, то делаем Inc(Count);
5: if(count>0) то начинаем сдвиг элемента на count ячеек влево, и переходим к следующей итерации цикла.
6: переменная Count будет постепенно расти, при встречи новых символов пробела и запятой, при этом будет всего ОДИН прогон по строке, в чем и заключается преимущество метода, хотя реализация будет немного проблематичной. .
Можешь выслать код программы на мыло, я посмотрю, где у тебя ошибки, и что не работает!
1: объявляем переменную count:=0 ( Integer )
2: Делаем прогонку по массиву от 0 до до длинны строки.
3: ставим if, и просматривая итый элемент строки, сравниваем его код с одним из ASCII кодов пробела или запятой.
4: Если символ оказался пробелом или запятой, то делаем Inc(Count);
5: if(count>0) то начинаем сдвиг элемента на count ячеек влево, и переходим к следующей итерации цикла.
6: переменная Count будет постепенно расти, при встречи новых символов пробела и запятой, при этом будет всего ОДИН прогон по строке, в чем и заключается преимущество метода, хотя реализация будет немного проблематичной. .
Можешь выслать код программы на мыло, я посмотрю, где у тебя ошибки, и что не работает!
Забей ты на этот паскаль, пользуйся С++. А вот таам то я уже смогу тебе помочь.
Похожие вопросы
- помогите плиз написать программу на паскале...тема массивы...нужно использовать поиск деления пополам!!!нужно срочно!
- Аналог ассоциативного массива в Паскале.
- Помогите с одномерным массивом. Напишите код на Паскале.
- Помогите,пожалуйста,решить задачу на двумерные массивы,в паскале.(задача вн.)Спасибо.
- Разработать программу анализа или преобразования массива в Паскале
- двумерный динамический массив в паскале
- Вопрос про массивы в паскале
- Помогите плиз!!Задача в Паскале
- Всем привет. Никак не могу понять динамически массивы в C++.
- Массивы в паскале
var
f:text;
i,n,t:integer;
a: array [1..100] of char;
begin
writeln('n ');
read(n);
assign(f,'nabor simvolov.txt');
reset(f);
for i:=1 to n do
while i100 do
begin
readln(f,a);
i:=i+1;
end;
i:=1;
while i100 do
begin
if a=',' or a=' '
then
begin
n:=i;
t:=t-1;
while n100 do begin
n:=n+1;
end;
i:=i+1;
end;
end;
assign(f,'rez.dat');
rewrite(f);
writeln(f);
for i:=1 to n do
writeln(f, a:5);
close(f);
end.
вот я нарешала, но ничо не выходит(