Операнды имеют неприводимые типы pascal как исправить

Операнды имеют неприводимые типы Pascal ABC Решение и ответ на вопрос 325734

Netrx

1 / 1 / 1

Регистрация: 13.06.2011

Сообщений: 29

1

Операнды имеют неприводимые типы

25.06.2011, 08:48. Показов 11172. Ответов 7

Метки нет (Все метки)


Вот такая проблема, составил программу сокращения дроби через процедуры, вот такую беду выдает в 14 строке…

В общем вот

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
uses crt;
procedure Sokr(var a,b:integer);
var
min:integer;
begin
writeln('Введите числитель');
readln(a);
writeln('Введите знаменатель');
readln(b);
if a>b then min:=b
else
min:=a;
repeat
if (a div min)=0 and (b div min)=0
then
begin
a:=a/min;
b:=b/min;
end;
else
min:=min-1;
until min=1;
Sokr(a,b);
end.

Где я допустил ошибку?

__________________
Помощь в написании контрольных, курсовых и дипломных работ, диссертаций здесь



0



Holy_Metal

72 / 72 / 60

Регистрация: 14.12.2010

Сообщений: 201

25.06.2011, 09:29

2

В 14 строке:

Pascal
1
if (a div min = 0) and (b div min = 0)



0



1 / 1 / 1

Регистрация: 13.06.2011

Сообщений: 29

25.06.2011, 09:49

 [ТС]

3

О, спасибо, но теперь возникла другая)

в 17 и 18 строках
Попытка присвоить интеджеру реал, но когда я меняю все на реал, в строчке 14, мне пишет что див не применим к реал



0



4149 / 1803 / 213

Регистрация: 06.10.2010

Сообщений: 4,033

25.06.2011, 09:54

4

if (a div min = 0) and (b div min = 0)

Такое условие НИКОГДА не выполнится



0



72 / 72 / 60

Регистрация: 14.12.2010

Сообщений: 201

25.06.2011, 09:55

5

Цитата
Сообщение от murderer
Посмотреть сообщение

Такое условие НИКОГДА не выполнится

Сделайте так, как выполнится. Я всего лишь исправил ошибку.



0



murderer

4149 / 1803 / 213

Регистрация: 06.10.2010

Сообщений: 4,033

25.06.2011, 11:12

6

Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
var
  a,b,min:integer;
begin
  writeln('Введите числитель');
  readln(a);
  writeln('Введите знаменатель');
  readln(b);
  min:=a;
  if a>b then
    min:=b;
  for min:=min downto 1 do
    if (a mod min)or(b mod min)=0 then
      break;
  writeln('числитель = ',a div min,'; знаменатель = ',b div min);
  readln;
end.



0



Netrx

1 / 1 / 1

Регистрация: 13.06.2011

Сообщений: 29

25.06.2011, 12:26

 [ТС]

7

Дык мне в процедуре надо…

Добавлено через 3 минуты

Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
uses crt;
procedure Sokr(var a,b:integer);
var
  min:integer;
begin
  writeln('Ââåäèòå ÷èñëèòåëü');
  readln(a);
  writeln('Ââåäèòå çíàìåíàòåëü');
  readln(b);
  min:=a;
  if a>b then
    min:=b;
  for min:=min downto 1 do
    if (a mod min)or(b mod min)=0 then
      break;
      Sokr (a,b);
      end;
      end.

Пишет отсутствует Begin основной программы, без end; требует его с точкой с запятой…

Добавлено через 10 минут
Все, сделал, выглядит так

Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
uses crt;
 var
  a1,b1,min1:integer;
procedure Sokr(var a,b, min:integer);
begin
  writeln('Ââåäèòå ÷èñëèòåëü');
  readln(a);
  writeln('Ââåäèòå çíàìåíàòåëü');
  readln(b);
  min:=a;
if a>b then
    min:=b;
for min:=min downto 1 do
if (a mod min)or(b mod min)=0 then
break;
writeln ('×è÷èëòåëü ðàâåí: ',a div min);
writeln ('Çíàìåíàòåëü ðàâåí: ',b div min);
end;
begin
Sokr (a1,b1,min1);
end.



0



Почетный модератор

64272 / 47571 / 32739

Регистрация: 18.05.2008

Сообщений: 115,182

25.06.2011, 12:27

8

Цитата
Сообщение от Netrx
Посмотреть сообщение

Пишет отсутствует Begin основной программы,

Естественно. Это же только процедура, а программы нет…



0



{1) Программа должна содержать меню и ввод-вывод в окна на экране.
Необходимо предусмотреть контроль ошибок пользователя при вводе данных.
При разработке программы применить технологию нисходящего проектирования.
Логически законченные фрагменты оформить в виде подпрограмм, все необходимые данные которым передаются через список параметров.
Использования глобальных переменных следует избегать.
2) Описать запись с именем PRICE, содержащую следующие поля:
• TOVAR — название товара;
• MAG — название магазина, в котором продается товар;
• STOIM — стоимость товара в руб.
3) Написать программу, выполняющую следующие действия:
• ввод с клавиатуры данных в массив SPISOK, состоящий из восьми элементов типа PRICE;
записи должны быть размещены в алфавитном порядке по названиям товаров;
• вывод на экран информации о товаре, название которого введено с клавиатуры;
• если таких товаров нет, выдать на дисплей соответствующее сообщение.}
program ekzamen;
 
uses
  crt;
 
const
  n = 2;
 
type
  Price = record
    tovar: string[20];
    mag: string[12];
    stoim: string[10];
  end;
 
var
  f: file of Price;
  w: price;
  spisok: array [1..n] of Price;
  t: Price;
  i, j, k: integer;
  nfile: string;
 
procedure sozd;{*******создание********}
begin
  clrscr;
  writeln('СОЗДАНИЕ МАССИВА  ЗАПИСЕЙ ТОВАРОВ');
  writeln('******************************');
  for i := 1 to n do   
  begin
    writeln('Ввести ', i, ' - ю запись');
    with spisok[i] do 
    begin
      write('Введите название Товара:  ');
      readln(tovar);
      write('Введите название магазина, в котором продается товар:  ');
      readln(mag);
      write('Стоимость товара в тенге:  ');
      readln(stoim);
    end;
  end;
  writeln('Ввод данных закончен');
         // *****сортировка по алфавиту***********
  for i := 1 to N - 1 do
    for j := i + 1 to n do
      if spisok[i].tovar > spisok[j].tovar then begin
        w := spisok[i]; spisok[i] := spisok[j]; spisok[j] := w;
      end;
  readln;
end;
 
procedure prosm;// *****просмотр записей***********
begin
  clrscr;
  writeln('ЧТЕНИЕ  МАССИВА  ЗАПИСЕЙ');
  writeln('**************************');
  writeln;
  writeln('<br>');
  writeln('  N   Товар       Магазин    Стоимость');
  writeln('<br>');
  for i := 1 to N do
    with spisok[i] do 
    begin
      writeln(i:3, tovar:15, mag:10, stoim:13);
    end;
  writeln('<br>');
  writeln('Конец просмотра');
  readln;
end;
 
procedure zapis;//*****Запись в файл'***********
begin
  clrscr;
  writeln('ЗАПИСЬ МАССИВА В ФАЙЛ');
  writeln('**********************');
  writeln;
  write(' ввести имя файла (например spisok.dat): ');
  readln( nfile);
  assign(f, nfile);
  rewrite(f);
  clrscr;
  writeln('ЗАПИСЬ МАССИВА В ФАЙЛ');
  writeln('**********************');
  writeln;
  for i := 1 to N do
    write(f, spisok[i]);
  writeln(' Запись в файл закончена');
  close(f);
  writeln('Содержимое файла');
  writeln('*****************');
  writeln('<br>');
  writeln('  N   Товар       Магазин    Стоимость');
  writeln('<br>');
  reset(f);
  i := 0;
  while not eof(f) do 
  begin
    read(f, w);
    inc(i);
    with w do
      writeln(i:3, w.tovar:15, w.mag:10, w.stoim:13);
  end;
  writeln('<br>');
  close(f);
  readln;
end;
 
procedure vibor;//***************Поиск по алфавиту**************
var
  m: integer; tv: string;
  ff: boolean;
begin
  clrscr;
  writeln('Поиск товаров по алфавиту');
  writeln('**************************');
  writeln;
  write('Ввести букву: ');
  readln(tv);
  clrscr;
  writeln('Поиск по алфавиту ', tv );
  writeln('****************************');
  writeln;
  m := 0;ff := true;
  writeln('<br>');
  writeln('  N   Товар       Магазин    Стоимость');
  writeln('<br>');
  for i := 1 to N do
    with spisok[i] do
      if tovar = tv then begin
        m := m + 1;
        ff := false;
        writeln(i:3, tovar:15, mag:10, stoim:13);
      end;
  if ff then begin writeln('Такой записи нет');readln; end;
  writeln('Поиск товаров закончен');
  readln;
end;
 
begin
  textbackground(1);
  textcolor(10);
  clrscr;
  repeat
    clrscr;
    Writeln('--------------ПОЛЬЗОВАТЕЛЬСКОЕ МЕНЮ------'  );
    writeln('-----------------------------------------');
    writeln('1. Создание массива записей с сортировкой');
    writeln('2. Просмотр массива записей');
    writeln('3. Выбор по алфавиту');
    writeln('4. Запись массива в файл');
    writeln('5. Выход');
    writeln('-----------------------------------------');
    write('Ваш выбор ');
    readln(k);
    case k of
      1: sozd;
      2: prosm;
      3: vibor;
      4: zapis;
      5: ;{выход}
    else begin
        writeln('нет такого пункта');
        readln;
      end;
    end;        // case
  until k = 5;
  writeln('Конец программы');
  readln;
end.

IPB

> Прочтите прежде чем задавать вопрос!

1. Заголовок темы должен быть информативным. В противном случае тема удаляется …
2. Все тексты программ должны помещаться в теги [code=pas][/code], либо быть опубликованы на нашем PasteBin в режиме вечного хранения.
3. Прежде чем задавать вопрос, см. «FAQ«, если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение — только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы — на PM!
6. Одна тема — один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!

> формализация и алгоритмизация графической задачи, ОШИБКА!

сообщение 20.12.2006 0:37

Сообщение
#1


гений чегото
**

Группа: Пользователи
Сообщений: 108
Пол: Мужской

Репутация: -  -1  +



пишет ошибку операнды имеют неприводимые типы помогите wink.gif

Прикрепленные файлы
Прикрепленный файл
 Program4.pas ( 174 байт )
Кол-во скачиваний: 249

———————

————-

избранный…. но не в Паскале…..

 Оффлайн  Профиль  PM 

 К началу страницы 

+ Ответить 

мисс_граффити

сообщение 20.12.2006 0:54

Сообщение
#2


просто человек
******

Группа: Пользователи
Сообщений: 3 641
Пол: Женский
Реальное имя: Юлия

Репутация: -  55  +



ругнулось на отсутствие ;
доставила — все работает
возможно, дело в компиляторе…
поставь скобочки по-другому.
типа так:

if  (x<=-p) then y:=a

———————

Все содержимое данного сообщения (кроме цитат) является моим личным скромным мнением и на статус истины в высшей инстанции не претендует.
На вопросы по программированию, физике, математике и т.д. в аське и личке

не отвечаю.

Даже «один-единственный раз» в виде исключения!

 Оффлайн  Профиль  PM 

 К началу страницы 

+ Ответить 

polic

сообщение 20.12.2006 0:59

Сообщение
#3


гений чегото
**

Группа: Пользователи
Сообщений: 108
Пол: Мужской

Репутация: -  -1  +



я короч не тот файл выставил просто этот был первоначально я его изменил забыл сохранить mega_chok.gif
ща попробую этот исправить

Прикрепленные файлы
Прикрепленный файл
 Program4.pas ( 206 байт )
Кол-во скачиваний: 287

———————

————-

избранный…. но не в Паскале…..

 Оффлайн  Профиль  PM 

 К началу страницы 

+ Ответить 

volvo

сообщение 20.12.2006 1:04

Сообщение
#4

Гость



Двойное сравнение делать нельзя… Надо объединять 2 одинарных And-ом

Кстати, может ты мне все-таки объяснишь, при чем здесь ГРАФИЧЕСКАЯ задача?

 К началу страницы 

+ Ответить 

polic

сообщение 20.12.2006 1:07

Сообщение
#5


гений чегото
**

Группа: Пользователи
Сообщений: 108
Пол: Мужской

Репутация: -  -1  +



я делал типа формулы эти (y:=x-p) по графику и чото я не понимаю то что ты сказал blink.gif Надо объединять 2 одинарных And-ом это как мож показать?

———————

————-

избранный…. но не в Паскале…..

 Оффлайн  Профиль  PM 

 К началу страницы 

+ Ответить 

мисс_граффити

сообщение 20.12.2006 1:35

Сообщение
#6


просто человек
******

Группа: Пользователи
Сообщений: 3 641
Пол: Женский
Реальное имя: Юлия

Репутация: -  55  +



if (0)<x<(p) then

а надо

if (0<x) and (x<p) then

зачем ты так странно ставишь скобки?

———————

Все содержимое данного сообщения (кроме цитат) является моим личным скромным мнением и на статус истины в высшей инстанции не претендует.
На вопросы по программированию, физике, математике и т.д. в аське и личке

не отвечаю.

Даже «один-единственный раз» в виде исключения!

 Оффлайн  Профиль  PM 

 К началу страницы 

+ Ответить 

polic

сообщение 20.12.2006 21:31

Сообщение
#7


гений чегото
**

Группа: Пользователи
Сообщений: 108
Пол: Мужской

Репутация: -  -1  +



мисс графити дастиш фантастиш give_rose.gif

———————

————-

избранный…. но не в Паскале…..

 Оффлайн  Профиль  PM 

 К началу страницы 

+ Ответить 

1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)

Пользователей: 0

500Gb HDD, 6Gb RAM, 2 Cores, 7 EUR в месяц — такие хостинги правда бывают

Связь с администрацией: bu_gen в домене octagram.name

Я имел в виду, что она обладает некоторыми свойствами переменной, а не всеми.

Но не сказал ведь?

А рекурсивные функции в Паскале как задаются? Всегда без взятия ее значения внутри ее тела? (Я просто уже не помню)
Ну вот, можно ли тот же факториал так прописать в Паскале:
function Fakt(n:byte):longint;
 begin
  if n=o then Fakt(n):=1
           else Fakt(n):=Fakt(n-1)*n;
 end;

Ты не путай рекурсию и «функция как переменная». При попытке взять значение функции внутри ее тела происходит все тот же ее вызов (а так как он внутри ее тела то и происходит рекурсивный вызов). А присвоить значение самой функции можно только в ее теле. Так что не убедил. Учись излагать свои мысли наиболее понятно для окружающих, чтобы не было двояких смыслов.

Код работает , а можно в двух словах почему нужно приписывать именно :5:4  ?Ну для общего понимания что же я за действие совершаю приписав :5:4 .

Write/WriteLn — это макрос а не функция. Именно поэтому, туда можно запихать неограниченное количество параметров или вызвать вообще без таковых. При выводе вещественных чисел можно их форматировать. В твоем примере, writeln(x:5:4), мы видим, что число Х должно быть отформатировано до 5 символов в длинну (первое число) и при этом содержать 4 знака после запятой (второе число). Второе число можно опустить и тогда необязательные числа после запятой не будут выводиться.
Например, программа:

uses dos,crt;
var  c,y:integer;
     x:real;
     t:text;
     l:string;
begin
     randomize; assign(t,'d:workpascalnumbers.txt'); rewrite(t);
     writeln(t,'Real numbers formation:');
     for c:=0 to 9 do begin
         x:=random(100)/33;
         Write(t,'Number: "'); Write(t,x); Write(t,'", x:6 result: "');
         Write(t,x:6); WriteLn(t,'"');
         Write(t,'Number: "'); Write(t,x); Write(t,'", x:4:2 result: "');
         Write(t,x:4:2); WriteLn(t,'"');
         Write(t,'Number: "'); Write(t,x); Write(t,'", x:8:0 result: "');
         Write(t,x:8:0); WriteLn(t,'"');
         end;
     writeln(t,'Integer numbers formation:');
     for c:=0 to 9 do begin
         y:=random(20)*10;
         Write(t,'Number: "'); Write(t,y); Write(t,'", y:6 result: "');
         Write(t,y:6); WriteLn(t,'"');
         Write(t,'Number: "'); Write(t,y); Write(t,'", y:4 result: "');
         Write(t,y:4); WriteLn(t,'"');
         end;
     close(t);
end.
и ее вывод:

Real numbers formation:
Number: " 2.60606060606005E+0000", x:6 result: " 2.6E+0000"
Number: " 2.60606060606005E+0000", x:4:2 result: "2.61"
Number: " 2.60606060606005E+0000", x:8:0 result: "       3"
Number: " 1.54545454545405E+0000", x:6 result: " 1.5E+0000"
Number: " 1.54545454545405E+0000", x:4:2 result: "1.55"
Number: " 1.54545454545405E+0000", x:8:0 result: "       2"
Number: " 2.72727272727207E+0000", x:6 result: " 2.7E+0000"
Number: " 2.72727272727207E+0000", x:4:2 result: "2.73"
Number: " 2.72727272727207E+0000", x:8:0 result: "       3"
Number: " 2.72727272727207E+0000", x:6 result: " 2.7E+0000"
Number: " 2.72727272727207E+0000", x:4:2 result: "2.73"
Number: " 2.72727272727207E+0000", x:8:0 result: "       3"
Number: " 2.93939393939218E+0000", x:6 result: " 2.9E+0000"
Number: " 2.93939393939218E+0000", x:4:2 result: "2.94"
Number: " 2.93939393939218E+0000", x:8:0 result: "       3"
Number: " 7.27272727272975E-0001", x:6 result: " 7.3E-0001"
Number: " 7.27272727272975E-0001", x:4:2 result: "0.73"
Number: " 7.27272727272975E-0001", x:8:0 result: "       1"
Number: " 3.03030303030482E-0001", x:6 result: " 3.0E-0001"
Number: " 3.03030303030482E-0001", x:4:2 result: "0.30"
Number: " 3.03030303030482E-0001", x:8:0 result: "       0"
Number: " 2.30303030303185E+0000", x:6 result: " 2.3E+0000"
Number: " 2.30303030303185E+0000", x:4:2 result: "2.30"
Number: " 2.30303030303185E+0000", x:8:0 result: "       2"
Number: " 2.57575757575614E+0000", x:6 result: " 2.6E+0000"
Number: " 2.57575757575614E+0000", x:4:2 result: "2.58"
Number: " 2.57575757575614E+0000", x:8:0 result: "       3"
Number: " 2.87878787878799E+0000", x:6 result: " 2.9E+0000"
Number: " 2.87878787878799E+0000", x:4:2 result: "2.88"
Number: " 2.87878787878799E+0000", x:8:0 result: "       3"
Integer numbers formation:
Number: "120", y:6 result: "   120"
Number: "120", y:4 result: " 120"
Number: "50", y:6 result: "    50"
Number: "50", y:4 result: "  50"
Number: "190", y:6 result: "   190"
Number: "190", y:4 result: " 190"
Number: "50", y:6 result: "    50"
Number: "50", y:4 result: "  50"
Number: "100", y:6 result: "   100"
Number: "100", y:4 result: " 100"
Number: "120", y:6 result: "   120"
Number: "120", y:4 result: " 120"
Number: "40", y:6 result: "    40"
Number: "40", y:4 result: "  40"
Number: "160", y:6 result: "   160"
Number: "160", y:4 result: " 160"
Number: "20", y:6 result: "    20"
Number: "20", y:4 result: "  20"
Number: "150", y:6 result: "   150"
Number: "150", y:4 result: " 150"
Так понятно? Замечу, что для целых чисел второе число задавать нельзя, ибо они на то и целые, что у них после запятой нету дробной части. Так же обращу внимание на то, что указание дробной части для реальных чисел является округлением(!), это видно на примере.

Понравилась статья? Поделить с друзьями:

Читайте также:

  • Опущенный кончик носа как исправить
  • Оптические ошибки при дисграфии
  • Опера произошла ошибка при поиске обновлений
  • Опущенный взгляд как исправить
  • Оптическая дисграфия примеры ошибок

  • 0 0 голоса
    Рейтинг статьи
    Подписаться
    Уведомить о
    guest

    0 комментариев
    Старые
    Новые Популярные
    Межтекстовые Отзывы
    Посмотреть все комментарии