Форум программистов, компьютерный форум, киберфорум
Lazarus
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.80/5: Рейтинг темы: голосов - 5, средняя оценка - 4.80
0 / 0 / 0
Регистрация: 08.10.2015
Сообщений: 128
1

Проходит сразу весь цикл

14.09.2016, 20:40. Просмотров 980. Ответов 7

Программа выдает, что я 10 раз вводил число, а на самом деле только один
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
var
  nik:string;
  chislo,zagad:integer;
  popitka:integer;
begin
 
  randomize;
    chislo := random(10)+1;
     popitka:= 1;
     zagad:=strToint(Edit1.Text);
     nik:=Edit2.Text;
     while popitka <= 10   do  begin
 
      if (chislo <> zagad) then
                                 begin
          Memo1.Lines.Add(nik+' '+'вы не угадали, это ваша'+' '+intTostr(popitka)+' '+'попытка!') ;
 
                                 end
    else
 
            Memo1.Lines.Add(nik+''+'вы угадали со'+' '+intTostr(popitka)+'-й попытки!Ваш рейтинг:'+inttostr(10-popitka));
 
                  popitka:=popitka+1;
    end;
 
             if  popitka = 11 then
           ShowMessage('Вы не угадали,загаданное число было'+' '+intTostr(chislo));
 
end;
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
14.09.2016, 20:40
Ответы с готовыми решениями:

Цикл проходит только первый номер вместо всех
Проблема вот в чём, по заданию нужно вывести самое популярное направление обучения, которые...

Не проходит весь цикл (находит не все заданные значения)
В общем, было такое у меня задание:Дана очередь данных о работниках фирмы: ФИО и адрес (улица, дом,...

Fscanf не проходит весь файл
Добрый день, написал функцию для общей программы проверки записей в файле. В функцию задается число...

Как точно определять весь траффик, который проходит через программу?
Пользователи жалуются, что статистика, выдаваемая моей прогой подвирает. Моя программа есть клиент...

7
586 / 453 / 147
Регистрация: 09.12.2013
Сообщений: 2,386
Записей в блоге: 2
14.09.2016, 20:48 2
Я не понял, а где ввод числа вообще?

Добавлено через 1 минуту
И отформатируйте отступы нормально, глаза же сломать...
0
Модератор
60607 / 45582 / 31469
Регистрация: 18.05.2008
Сообщений: 109,589
14.09.2016, 20:52 3
В строке 8 число 1 раз вводится.
0
586 / 453 / 147
Регистрация: 09.12.2013
Сообщений: 2,386
Записей в блоге: 2
14.09.2016, 20:55 4
В строке 10 берётся текст из окошка Edit1 и просто 10 раз сравнивается. Это не алё. Возьмите что ли InputBox()...
0
0 / 0 / 0
Регистрация: 08.10.2015
Сообщений: 128
14.09.2016, 20:55  [ТС] 5
Ввод числа и имени через Edit-ы
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
var
  nik:string;
  chislo,zagad:integer;
  popitka:integer;
begin
    randomize;
    chislo := random(10)+1;
    popitka:= 1;
    while popitka <= 10   do  begin
                zagad:=strToint(Edit1.Text);
                nik:=Edit2.Text;
                if (chislo <> zagad) then
                      Memo1.Lines.Add(nik+' '+'вы не угадали, это ваша'+' '+intTostr(popitka)+' '+'попытка!') ;
                else
                      Memo1.Lines.Add(nik+''+'вы угадали со'+' '+intTostr(popitka)+'-й попытки!Ваш рейтинг:'+inttostr(10-popitka));
                      popitka:=popitka+1;
       end;
       if  popitka = 11 then
           ShowMessage('Вы не угадали,загаданное число было'+' '+intTostr(chislo));
 
end;
0
586 / 453 / 147
Регистрация: 09.12.2013
Сообщений: 2,386
Записей в блоге: 2
14.09.2016, 21:11 6
Лучший ответ Сообщение было отмечено ProFrog111 как решение

Решение

Имена переменных zagad и chislo логически перепутаны местами. Да и вообще неудачные имена.
Вы понимаете что в Edit1 лежит текст? И вы 10 раз сравниваете один и тот же текст? В какой момент времени он должен был успеть поменяться по вашему?
Возьмите InputBox().

Добавлено через 2 минуты
А ещё что там этакое:
  • +' '+'вы
  • +''+'вы
  • +' '+'поп

Добавлено через 1 минуту
Randomize достаточно вызывать один раз за время работы программы, например в FormCreate.

Добавлено через 9 минут
Delphi
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
Procedure TForm1.FormCreate(Sender: TObject);
Begin
Randomize();
End;
 
Procedure TForm1.Button1Click(Sender: TObject);
Var PlayerName: String; TargetNumber, PlayerShot, Step: Integer;
Begin
PlayerName:=Edit2.Text;
TargetNumber:=Random(10)+1;
Step:=1;
While Step<=10 Do
      Begin
      PlayerShot:=StrToIntDef(InputBox('Ввод данных', 'Введите число:', ''), 0);
      If (TargetNumber<>PlayerShot) Then
            Begin
            Memo1.Lines.Add(PlayerName+', вы не угадали, это ваша '+IntToStr(Step)+' попытка!');
            End
      Else
            Begin
            Memo1.Lines.Add(PlayerName+', вы угадали со '+IntToStr(Step)+'-й попытки! Ваш рейтинг: '+IntToStr(10-Step));
            Step:=0;
            End;
      Inc(Step);
      End;
If Step=11 Then
      ShowMessage('Вы не угадали, загаданное число было '+IntToStr(TargetNumber));
End;
1
0 / 0 / 0
Регистрация: 08.10.2015
Сообщений: 128
14.09.2016, 21:16  [ТС] 7
Randomize достаточно вызывать один раз за время работы программы, например в FormCreate.
А чем это лучше или только ради удобства?
0
Модератор
Эксперт Pascal/Delphi
6267 / 4224 / 4611
Регистрация: 05.06.2014
Сообщений: 20,805
16.09.2016, 10:57 8
ProFrog111,
Что такое randomize и random ?
1
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
16.09.2016, 10:57

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

Анимация таймера - стрелка проходит сразу два деления
Такая проблема: Есть анимация таймера ( стрелка каждую секунду передвигается на 1 деление, при...

цикл не проходит
подскажите,последний цикл не проходит..что поменять как быть.. Sub pr() Dim B() As Single Dim...

Не проходит цикл
мжет что-то забыла? дак,вроде, нет..увеличивается на дельта икс... но не выводит таблицу значений...

Сколько метров от дома до магазина, если человек идет со скоростью V м/мин, а весь путь она проходит за T ч?
4.Сколько метров от дома до магазина, если человек идет со скоростью V м / мин, а весь путь она...

Как заставить JIT откомпилировать весь код сразу?
При запуске программы возникают тормоза при первом обращении к методам около 3 сек, потом все...

Цикл проходит недостаточное к-во раз
Задача посчитать е^x. Считается через ряд Тейлора где е^x = 1 + x/1! + x^2/2! + x^3/3! + ......


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2020, vBulletin Solutions, Inc.