0 / 0 / 0
Регистрация: 26.11.2008
Сообщений: 33
1

Обработка числовых и символьных массивов

26.11.2008, 22:29. Показов 2836. Ответов 16
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
помогите, плиз, решить 2 задачки - очень надо( очень срочно. совсем не знаю, что делать((

тема: решение задач с использованием циклических плгоритмов. обработка числовых и символьных массивов

1.упорядочить строки в порядке возрастания сумм их отрицательных четных элементов


здесь дохожу до определенного момента, и дальше знаю( только то, что надо отсортировать полученный одномерный массив и потом обратить его обратно в исходный, упорядочнив по принципу одномерного. но совсем не знаю, как это организовать/записать(((
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
Program opr_poryadka;
uses crt;
const line=50;
      stol=30;
type mass=array[1..line, 1..stol] of integer;
     ms=array[1..stol] of integer;
var a, b: mass; (*massiv*)
     s: ms; (*summa elementov*)
    i, j, n, m: integer;
begin clrscr;
      writeln('Vvedite razmeri matrici');
      writeln('n - kol-vo strok, m - kol-vo stolbcov');
      read(n,m);
      for i:=1 to n do
          for j:=1 to m do
          begin readln(a[i,j]);
          end;
      writeln('Ishodnaya matrica');
      for i:=1 to n do
          begin for j:=1 to m do
                write(a[i,j]:5);
                writeln
          end;
          for i:=1 to n do (*dlya kaghdoj stroki*)
       for j:=1 to m do (*summiruem elementi 1j stroki*)
          begin
          if (a[i,j]<0) and (a[i,j] mod 2=0) then
          s[i]:=s[i]+a[i,j];
2.отформатировать текст по "n" символов в строке (вставить равномерно между словами пробелы, чтобы длина строки была равна "n")


эту задачку совсем не знаю, как решить :'(

Добавлено через 2 часа 47 минут 9 секунд
помогите, плиз, решить
неужели никто не знает, как?(
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
26.11.2008, 22:29
Ответы с готовыми решениями:

обработка символьных массивов
Помогите, пожалуйста решить задачу. Сохранить текст в массиве. Найти в тексте слова, которые...

Обработка числовых массивов
Определить минимальный элемент двухметрного массива и с помощью перестановок строк и столбцов...

Обработка двумерных числовых массивов
Заполнить двумерный числовой массив В(5, 5) целыми числами. Столбец, содержащий минимальный...

Обработка и модификация одномерных числовых массивов
Дана последовательность из 100 различных целых чисел. Найти среднее арифметическое значение чисел,...

16
257 / 173 / 27
Регистрация: 17.10.2008
Сообщений: 770
27.11.2008, 00:57 2
1.упорядочить строки в порядке возрастания сумм их отрицательных четных элементов.
Первая готова...
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
program Project2;
 
const ln=50;
        st=60;
var mass:array[1..ln, 1..st] of integer;
    i,j,k,line,stol,vrem1,vrem2,vrem:integer;
begin
    Write('Line= Stol=');
    ReadLn(line, stol);
     for i:=1 to line do
     for j:=1 to stol do
       begin
          Write('mass[',i,',',j,']=');
          ReadLn(mass[i,j]);
       end;
    vrem1:=0;
    vrem2:=0;
     for i:=1 to line-1 do
     for j:=1 to line-1 do
       begin
           for k:=1 to stol do
            if (mass[j,k]<0) and ((mass[j,k] mod 2)=0) then
             vrem1:=vrem1+mass[j,k];
           for k:=1 to stol do
            if (mass[j+1,k]<0) and ((mass[j+1,k] mod 2)=0) then
             vrem2:=vrem2+mass[j+1,k];
           if vrem1<vrem2 then
            begin
              for k:=1 to stol do
                begin
                   vrem:=mass[j,k];
                   mass[j,k]:=mass[j+1,k];
                   mass[j+1,k]:=vrem;
                end;
            end;
          vrem1:=0;
          vrem2:=0;
       end;
 
     for i:=1 to line do
     for j:=1 to stol do
       begin
         if j<>stol then
          Write(mass[i,j],' ')
         else
          WriteLn(mass[i,j]);
       end;
    ReadLn;
end.
Добавлено через 2 минуты 45 секунд
2.отформатировать текст по "n" символов в строке (вставить равномерно между словами пробелы, чтобы длина строки была равна "n")
тут пояснения нужны, от куда берётся текст(из файла)? Выводить нуно на экран или в отдельный фаил?
1
0 / 0 / 0
Регистрация: 26.11.2008
Сообщений: 33
27.11.2008, 01:22  [ТС] 3
Arriba, спасибо большое за первую.
по поводу второй - текст надо сохранить в массиве (сам текст ввести с клавиатуры), надо выводить на экран для проверки правильности.
0
257 / 173 / 27
Регистрация: 17.10.2008
Сообщений: 770
27.11.2008, 11:35 4
Цитата Сообщение от Nyuta Посмотреть сообщение
Arriba, спасибо большое за первую.
по поводу второй - текст надо сохранить в массиве (сам текст ввести с клавиатуры), надо выводить на экран для проверки правильности.
Скажи пожалуйста,получается нуно просто вводить предложение, и потом запросить у пользователя число N, по скольку символов строчку разбить.Но смотри если число N будет меньше длинны одного слова, тогда будет что слово разделено на две части. Если не прально понял, приведи пример ввода данных и того, что получить нуно.
0
Почетный модератор
64291 / 47589 / 32740
Регистрация: 18.05.2008
Сообщений: 115,181
27.11.2008, 12:07 5
Вот еще решение первой задачи. Здесь наглядно видно, что стороки матрицы сортируются по возрастанию суммы четных отрицательных элементов, может понравится.
Код
Program opr_poryadka;
uses crt;
const line=50;
      stol=30;
var a:array[1..line,1..stol] of integer; (*massiv*)
    s:integer; (*summa elementov*)
    i,j,n,m,p,t: integer;
begin
clrscr;
repeat
write('Vvedite kol-vo strok n=');readln(n);
write('Vvedite kol-vo stolbcov m=');readln(m);
until (n>0)and(n<=line)and(m>0)and(m<=stol);
for i:=1 to n do
for j:=1 to m do
read(a[i,j]);
readln;
clrscr;
writeln('Ishodnaia matrica:','Summa':m*5-9);
for i:=1 to n do    
  begin
    s:=0;
    for j:=1 to m do
    if (a[i,j]<0)and(a[i,j] mod 2=0) then 
    s:=s+a[i,j];   {сумма отрицательных четных по строкам}
    a[i,m+1]:=s;  {вставляем сумму в матрицу лишним столбцом справа}
  end;
for i:=1 to n do
  begin
    for j:=1 to m+1 do
    if j=m+1 then write(a[i,j]:8) {выводим последний столбец с суммами с большим отчтупом}
	  else write(a[i,j]:5);  {остальные столбцы обычно}
	  writeln;
  end;
writeln;
for i:=1 to n-1 do           {сортировка строк}
for p:=1 to n-1 do
if a[p,m+1]>a[p+1,m+1] then {по возрастанию сумм (последний столбец)}
   begin
     for j:=1 to m+1 do
       begin
        t:=a[p,j];a[p,j]:=a[p+1,j];a[p+1,j]:=t; {сортируем все элементы в других столбцах, строки переставляются}
       end;
   end;
writeln('Sortirovka strok:','Summa':m*5-8);
for i:=1 to n do
  begin
    for j:=1 to m+1 do
    if j=m+1 then write(a[i,j]:8) {такой же вывод}
	  else write(a[i,j]:5);
	  writeln;
  end;
readln
end.
Добавлено через 5 минут 30 секунд
To Arriba
Суть задачи в том, что вводишь строки длиной скажем от 40 до 50 символов длиной.
Вводишь число N=60. Все строки должны стать длиной 60 символов за счет добавления пробелов между словами. Короче форматирование по ширине как в Ворде. Видимо если строка длиной более N, то ее надо перенести и остаток тоже отформатировать, короче немного повозиться надо.
1
0 / 0 / 0
Регистрация: 26.11.2008
Сообщений: 33
27.11.2008, 13:02  [ТС] 6
Arriba, думаю, что по поводу 2ой задачки Puporev прав

Суть задачи в том, что вводишь строки длиной скажем от 40 до 50 символов длиной.
Вводишь число N=60. Все строки должны стать длиной 60 символов за счет добавления пробелов между словами. Короче форматирование по ширине как в Ворде. Видимо если строка длиной более N, то ее надо перенести и остаток тоже отформатировать, короче немного повозиться надо.
0
257 / 173 / 27
Регистрация: 17.10.2008
Сообщений: 770
27.11.2008, 21:18 7
Puporev, но всё таки, если вдруг строчка состоит из одного слова, а N меньше длинны слова? или надо это отсекать? А насчёт выравнивания ты прав, есть у меня идейка как реализовать.
0
Почетный модератор
64291 / 47589 / 32740
Регистрация: 18.05.2008
Сообщений: 115,181
27.11.2008, 21:26 8
uporev, но всё таки, если вдруг строчка состоит из одного слова, а N меньше длинны слова? или надо это отсекать? А насчёт выравнивания ты прав, есть у меня идейка как реализовать.
Полностью согласен. Думаю тут и половина условия не написана. Наши ТC считают нас тупыми и неспособными понять условие задачи в том виде, как оно написано в методичке, поэтому пытаются своим, понятным им языком, изложить это задание, при этом пропустив все, что они не понимают, а остатки исковеркать так, что хрен поймешь.
0
257 / 173 / 27
Регистрация: 17.10.2008
Сообщений: 770
27.11.2008, 21:37 9
Puporev, это ты верно подметил. Как поймут так и в форум пишут, нет чтоб написать нормально, как почеловечески препод им написал...Но бывает и препод чудик, задаст хрен знает что а потом и говорит, ой чёт я ошибся...
0
0 / 0 / 0
Регистрация: 26.11.2008
Сообщений: 33
28.11.2008, 13:51  [ТС] 10
в методичке именно так, слово в слово, задачка и сформултрована
0
257 / 173 / 27
Регистрация: 17.10.2008
Сообщений: 770
29.11.2008, 00:03 11
Ты хоть прочти, какой мы вопрос задаём, а то зделаем как захотим, думаешь переделывать захочется....!!!Пока не ответиш, даж и не возьмёмся...
0
0 / 0 / 0
Регистрация: 26.11.2008
Сообщений: 33
29.11.2008, 18:27  [ТС] 12
думаю надо отсекать вероятность, что N меньше длинны слова
0
0 / 0 / 0
Регистрация: 26.11.2008
Сообщений: 33
01.12.2008, 18:45  [ТС] 13
Arriba, помоги, плиз, со 2ой задачкой...
0
257 / 173 / 27
Регистрация: 17.10.2008
Сообщений: 770
02.12.2008, 09:43 14
Цитата Сообщение от Nyuta Посмотреть сообщение
Arriba, помоги, плиз, со 2ой задачкой...
Некогда извини, сессия, в конце недели токо...Если никто не решит обещаю решу...
0
Почетный модератор
64291 / 47589 / 32740
Регистрация: 18.05.2008
Сообщений: 115,181
02.12.2008, 13:00 15
Вот написал для реального случая, без выкрутасов, т.е. имеем массив строк длиной до 50 символов, содержащих хотя бы 1 пробел. Нужно установить длину строки например в 60 символов, можно 70, 80. В таком случае программа корректно работает. Думаю на первую сдачу пойдет.
Код
uses crt;
const sh_str=60;
var s:array[1..20] of string;
    i,n,j:integer;
begin
clrscr;
repeat
write('Введитите количество строк:');
readln(n);
until (n>=1)and(n<=20);
writeln('Введите ',n,' строк, длиной не более 50 символов,содержащих хотя бы 1 пробел:');
for i:= 1 to n do
repeat
  readln(s[i]);
until (length(s[i])<=50)and(pos(' ',s[i])>0);
{проверяем строки на соответствие по длине и наличию пробела}
for i:=1 to n do
   begin
     j:=1;{если j=1 заканчиваем}
     while Length(s[i])<sh_str do{пока строка меньше заданного размера}
     if (j>1) then {если j>1, то вставляем пробелы за пробелами}
       begin
        if (s[i][j]=' ') and (s[i][j+1]<>' ') then Insert(' ',s[i],j);
        Dec(j) {после каждой вставки уменьшаем j}
       end
     else j:=Length(s[i])-1;{изначально j на 1 меньше длины строки
     короче увеличиваются пробелы, увеличивается длина строки,
     уменьшается "запас" пробелов}
     writeln(s[i]);
   end;
readln
end.
1
0 / 0 / 0
Регистрация: 26.11.2008
Сообщений: 33
02.12.2008, 13:13  [ТС] 16
Puporev, огромное спасибо, выручил))
0
257 / 173 / 27
Регистрация: 17.10.2008
Сообщений: 770
04.12.2008, 22:05 17
Puporev, спасиб подсобил...
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
04.12.2008, 22:05
Помогаю со студенческими работами здесь

Обработка двумерных числовых массивов. Найти число элементов, кратных k
Задана квадратная матрица порядка N. Найти число элементов, кратных k, и наибольший из них.

Обработка и модификация одномерных числовых массивов
Вводится последовательность символов. Напечатать те сим-волы, которые не вошли в последовательность.

Обработка числовых и символьных последовательностей
Задание по Borland C++ 5.02,только НЕ BUILDER!!! Задание такое:Ввести произвольную...

Обработка числовых и символьных последовательностей
Дано натуральное число n, действительное число k и последовательность действительных чисел a1, a2,...


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

Или воспользуйтесь поиском по форуму:
17
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2023, CyberForum.ru