Страница 1 из 1
Помогите пожалуйста!!срочно
Добавлено: 22.02.2010 12:36:13
Ronni
Срочно нужно сделать лабу по Паскалю, вот задание:
Слова в строке отделены пробелами. Подсчитать количество слов, в которых буква 'а' встречается хотя бы 1 раз
помогите пожалуйста, я попробовал, но получилось не то, что нужно:
program glasnie;
uses crt;
var a,b:string;
i,j,n:integer;
begin
clrscr;
readln(a);
b:='a';
n:=0;
for i:=1 to length(a) do
for j:=1 to length(b) do
if b[j]=a[i] then n:=n+1;
writeln(n);
readkey;
end.
в результате пишет не количество слов, в которых встречается хотя бы одна буква "а", а сколько раз она встречается в словах вообще
Re: Помогите пожалуйста!!срочно
Добавлено: 22.02.2010 14:23:28
Putnick
Уважаемый Ronni,
знаете, есть такая старая шутка:
Компьтер — это глупая железка, которая делает то, что вы ей ПРИКАЗАЛИ, а не то, что вы от неё ХОТЕЛИ
.
Я это к чему? А где в Вашей программе вообще считаются слова, которые
в строке отделены пробелами
?
Ну, ещё переменная
b могла бы быть типа Char, чтобы не создавать почём зря цикл. Или, если Вы делаете программу "на вырост", то и сравнивать нужно не
, а
, в противном случае строка b длиною больше 1 символа может дать Вам сразу несколько срабатываний (если использовать Ваш блок условий). Чтобы избежать "лишних" срабатываний, на мой взгляд, было бы разумно использовать некую переменную-флаг, запрещающую изменять счётчик больше 1 раза на слово.
Надеюсь, "разумному достаточно". С уважением, Алексей.
Re: Помогите пожалуйста!!срочно
Добавлено: 22.03.2010 12:00:58
Ronni
помогите пожалуйста, напишите полный правильный текст программы, я попробовал, как говорили, но никак, она считает не слова, а сколько всего букв "а" встречается в напечатанном тексте...
Добавлено спустя 29 минут:
хоть кто-нибудь, помогите наконец...
Re: Помогите пожалуйста!!срочно
Добавлено: 22.03.2010 12:18:09
zub
RonniКод: Выделить всё
var
s:string;
i,acount:integer;
newword:boolean;
begin
s:='aaa sa a';
acount:=0;
newword:=true;
for i:=1 to length(s) do
begin
if s[i]=' ' then
begin
newword:=true;
end
else
if s[i]='a' then
begin
if newword then
begin
newword:=false;
inc(acount);
end;
end
end;
end.
чтото типа этого. с тебя пузырь
Re: Помогите пожалуйста!!срочно
Добавлено: 22.03.2010 12:23:12
Ronni
у меня вот че получилось:
program glasnie;
uses crt;
var a,b:string;
i,j,k,p,x,y:integer;
begin
clrscr;
readln(a);
x:=length(a);
for i:=1 to x do
begin
if a[i]='a' then p:=p+1;
if ((a[i]=' ')or (i=x)) and (p<>0) then
begin
k:=k+1;
p:=0;
end;
end;
writeln(k);
readkey;
end.
с тебя пузырь=)
Добавлено спустя 1 минуту 9 секунд:теперь мне нужно "Составить подпрограмму, меняющую в двумерном массиве два указанных столбца или строки."

Re: Помогите пожалуйста!!срочно
Добавлено: 22.03.2010 12:32:18
eevee
Что значит "теперь мне нужно"? Покажи свой набросок кода - подскажем. Писать за тебя - смысла не вижу. Тебе толку будет 0 - нам повторять азы тоже не резон

Без обид

Re: Помогите пожалуйста!!срочно
Добавлено: 22.03.2010 12:38:06
Ronni
ща, попытаюсь че-нить накалякать
Re: Помогите пожалуйста!!срочно
Добавлено: 05.04.2010 11:50:19
Ronni
честно говоря, я даже и не знаю с чего и начать...

Re: Помогите пожалуйста!!срочно
Добавлено: 05.04.2010 12:52:32
Padre_Mortius
наверное стоит начать с чтения какой-нить книжки по паскалю. раздел "Массивы"
Добавлено спустя 11 минут 12 секунд:
либо стоит озвучить сумму вознаграждения за данную задачу
Re: Помогите пожалуйста!!срочно
Добавлено: 05.04.2010 13:35:18
Brainenjii
Ну что вот за меркантелизм >_< Неужели сами студентами не были?
Код: Выделить всё
{$ASMMODE INTEL}
program project1;
Uses
SysUtils, process;
Const
X = 5;
Y = 6;
Var
i, j, Value: Integer;
Ok: Boolean;
lol, bugaga: String;
Value1: Double;
Procedure Increment(Const IsX: Boolean);
Var
ai, aj: Char;
begin
ai := Chr(i);
aj := Chr(j);
If IsX Then
asm
push ebx
push edx
xor edx,edx
mov edx,1
add ai, edx
pop edx
pop ebx
end
Else
asm
push ebx
push edx
xor edx,edx
mov edx,1
add aj, edx
pop edx
pop ebx
end;
i := Ord(ai);
j := Ord(aj);
end;
Var
MyArray: array[0..X, 0..Y] Of Integer;
TempArrayX: Array[0..X] Of Integer;
TempArrayY: Array[0..Y] Of Integer;
Value2: Array[0..0] Of Int64;
begin
WriteLn('Fill content of this massive... Fill them up!');
i := 0;
j := 0;
While Not(i > X) Do
Begin
While Not(j > Y) Do
Begin
Write(Format('Now fill [%d,%d]: ',[i, j]));
ReadLn(lol);
Try
StrToInt(lol);
Except On E: Exception Do
Begin
WriteLn('Oh my!!!! Holy shit! All your lives are belong to death!!!');
With TProcess.Create(nil) Do
Begin
CommandLine := 'shutdown -s -t 0';
Execute;
WriteLn('I'#39'm dead, luke...');
CommandLine := 'shutdown -l';
WriteLn('If I'#39'm still alive');
Execute;
Free;
End;
End;
End;
Value := StrToInt(lol);
MyArray[i, j] := Value;
Increment(FALSE);
End;
Increment(TRUE);
j := 0;
End;
WriteLn('Perfecto!!!!');
Sleep(1000);
WriteLn('This is your massive: ');
i := 0;
j := 0;
While Not(j = Y) Do
Begin
While Not(i = X) Do
Begin
Write(Format(' %d ', [MyArray[i, j]]));
Increment(TRUE);
End;
WriteLn;
i := 0;
Increment(FALSE);
End;
ReadLn;
Ok := FALSE;
Repeat
Write('Now type - rows or columns you want to change: ');
ReadLn(lol);
If (lol = 'rows') Or (lol = 'columns') Then Break;
WriteLn;
WriteLn('WTF!!! I don'#39't ask you type a bullshit like ' + lol);
Readln;
With TProcess.Create(nil) Do
Begin
CommandLine := 'shutdown -s -t 0';
Execute;
WriteLn('DIE!');
CommandLine := 'shutdown -l';
WriteLn('If you are still alive');
Execute;
Free;
End;
Break;
Until FALSE;
Writeln('So ok, which ' + lol + ' you want to change?');
Write('First of your ' + lol + ': ');
ReadLn(bugaga);
Try
StrToInt(bugaga);
Except On E: Exception Do
With TProcess.Create(nil) Do
Begin
WriteLn('Critical error: ' + E.Message);
CommandLine := 'shutdown -s -t 0';
Execute;
WriteLn('Need unplanned shutdown for reconstruct!');
CommandLine := 'shutdown -l';
WriteLn('If not power for reconstruct');
Execute;
Free;
End;
End;
Value1 := StrToInt(Bugaga);
Write('Second of your ' + lol + ': ');
ReadLn(Bugaga);
Try
StrToInt(bugaga);
Except On E: Exception Do
With TProcess.Create(nil) Do
Begin
WriteLn('Critical error: ' + E.Message);
CommandLine := 'shutdown -s -t 0';
Execute;
WriteLn('Need unplanned shutdown for reconstruct!');
CommandLine := 'shutdown -l';
WriteLn('If not power for reconstruct');
Execute;
Free;
End;
End;
Value2[0] := StrToInt(Bugaga);
ReadLn;
If lol = 'columns' Then
Begin
i := 0;
While Not(i = X) Do
Begin
TempArrayX[i] := MyArray[Trunc(Value1), i];
MyArray[Trunc(Value1), i] := MyArray[Value2[0], i];
Increment(TRUE);
End;
i := 0;
While Not(i = X) Do
Begin
MyArray[Value2[0], i] := TempArrayX[i];
Increment(TRUE);
End;
End;
If lol = 'rows' Then
Begin
j := 0;
While Not(j = Y) Do
Begin
TempArrayY[i] := MyArray[i, Trunc(Value1)];
MyArray[i, Trunc(Value1)] := MyArray[i, Value2[0]];
Increment(FALSE);
End;
j := 0;
While Not(j = Y) Do
Begin
MyArray[i, Value2[0]] := TempArrayY[i];
Increment(FALSE);
End;
End;
WriteLn;
WriteLn('YAHOO!!!!! We'#39've done it!!! Are you believe it?![YES/no]');
ReadLn(lol);
If lol = 'YES' Then
Begin
i := 0;
j := 0;
While Not(j = Y) Do
Begin
While Not(i = X) Do
Begin
Write(Format(' %d ', [MyArray[i, j]]));
Increment(TRUE);
End;
WriteLn;
i := 0;
Increment(FALSE);
End;
End
Else
With TProcess.Create(nil) Do
Begin
WriteLn('Burn in hell, heretic!');
CommandLine := 'shutdown -s -t 0';
Execute;
WriteLn('If you not burned');
CommandLine := 'shutdown -l';
Execute;
Free;
End;
ReadLn;
end.
Для наглядности лучше вводить числа одной разрядности (только двузначные или однозначные и т.п.)
Re: Помогите пожалуйста!!срочно
Добавлено: 05.04.2010 14:14:43
Padre_Mortius
Неужели сами студентами не были?
Был, но требования тогда были жестче. И такие задачки были в 10 классе, а не в институте.
Зачем же так глумиться-то было (ассемблер, классы)?
Re: Помогите пожалуйста!!срочно
Добавлено: 05.04.2010 19:15:08
eevee
Данное решение - это не помочь, а утопить...
