(1)不能得出必然结论,因为小前提是否定的,按照规则,结论也应该是否定的,那么大项在前提中不周延,在结论中变得周延了,违反了“在前提中不周延的项在结论中也不得周延”的规则。
(2)不能得出必然结论,因为小前提是否定的,按照规则,结论也应该是否定的,那么大项在前提中不周延,在结论中变得周延了,违反了“在前提中不周延的项在结论中也不得周延”的规则。
(3)不能得出必然结论,因为三段论要求中项在前提中至少周延一次,这两个前提中中项一次也不周延。
(4)可以得出SAP的必然结论,符合三段论的各项规则,
(5)不能得出必然结论,因为两个否定的前提不能得出结论。
(6)可以得出SEP的必然结论,符合三段论各项规则。
(7)可以得出SIP的结论,符合三段论各项规则。
(8)不能得出必然结论,因为三段论要求中项在前提中至少周延一次,这两个前提中中项一次也不周延。
1.02 设商品是’S’交换价值是P.故该推理的形式是SAP→-POS因为SAP→SE-P→PES→-POS
或SAP→SEP→PES→POS
或SAP→SEP→PES→PAS→SIP→PIS→POS
所以.SAP→POS为正确的推理
1.03设导体是S 有机物是P 故推理形式是SIP→PIS
因为SIP→SOP.PIS→POS
又因为SOP不能换位
所以SIP推不出PIS
所以该推理不正确
1.04 设中子是M,不带电的是P,基本粒子是S 故推理的形式是,MAP/MAS→SAP
因为小前提中S是不周延的,而结论中的S是周延的
所以该推理形式是不正确的
该推理不正确
1.05设法律是M,上层建筑为S,阶段性是P,故该推理形式是MAS MAP/SAP
因为小前提中S是不周延的,即结论中SAP的S是周延的,不因为前提中不周延的,在结论中也必然为不周延的
所以
该推理形式不正确
所以
该推理不正确
1.06设塑料是S,导体为M,含有自由的电子物为P,故该推理形式是SEM MAP/SEP
因为大前提MAP中P是不周延的 而结论中SEP中的P是周延的
又因为前提中不周延的 结论中也必为不周延
所以 该推理前提不正确的
故该推理不正确
1.07 设鲸为S 鱼是P 通过肺呼吸的为M 故该推理形式为PEM SAM\SEP
因为该推理形式属于三段论的第2论,且是EAE形式,是有效形式,故该推理也是有效的
因为第2格的规则是
1大前提必须是全称判断
2两个前提中必须有一个是否定判断的
所以 该推理形式是有效的
所以
该推理是正确的
二1尽管火车没晚点,他也没按时到会。¬(p←¬q)=¬p∧¬q
2虽然不及时转产,但是这个企业不会倒闭。¬(p→q)=p∧¬q
3尽管他搞经济活动,但他不会出差错或者犯错误。¬(¬p←¬q)=p∧¬q
4如果小张是象棋爱好者,那么他也是围棋爱好者。¬(¬p∧q)=¬p→¬q
5王老师没有表达清楚他的意思且同学们都听错了。¬(p∨q)=p←→q
三(一)1如果老刘懂的法律,那么他本人是律师。p←q=q→p
2只有老刘不懂得法律,老刘才不是律师。p←q=¬q←¬p
3如果老刘本人不是律师,那么老刘不懂得法律。p←q=¬p→¬q
(二)1只有老李不出差,小张才不主持工作。p→q=¬p←¬q
2只有小王主持工作,老李才出差。p→q=q←p
3如果小王没有主持工作,那么老李没有出差。p→q=¬q→¬p
四1或者歌德尔不是数学家,或者是逻辑学家。¬(p∧¬q)=¬p∨q
2或者不提高劳动生产率,或者采用新技术。p→q=¬p∨q
3或者重视困难,或者不克服困难。p←q=p∨¬q
信号量:一个整数;大于或等于0时代表可供并发进程使用的资源实体数;
小于0时代表正在等待使用临界区的进程数;
用于互斥的信号量初始值应大于0;
只能通过P、V原语操作而改变;
信号量元素组成:
1、表示信号量元素的值;
2、最后操作信号量元素的进程ID
3、等待信号量元素值+1的进程数;
4、等待信号量元素值为0的进程数;
二、主要函数
1.1 创建信号量
int semget(
key_t key, //标识信号量的关键字,有三种方法:1、使用IPC——PRIVATE让系统产生,
// 2、挑选一个随机数,3、使用ftok从文件路径名中产生
int nSemes, //信号量集中元素个数
int flag //IPC_CREAT;IPC_EXCL 只有在信号量集不存在时创建
)
成功:返回信号量句柄
失败:返回-1
1.2 使用ftok函数根据文件路径名产生一个关键字
key_t ftok(const char *pathname,int proj_id)
路径名称必须有相应权限
1.3 控制信号量
int semctl(
int semid, //信号量集的句柄
int semnum, //信号量集的元素数
int cmd, //命令
/*union senum arg */... //
)
成功:返回相应的值
失败:返回-1
命令详细说明:
cmd: IPC_RMID 删除一个信号量
IPC_EXCL 只有在信号量集不存在时创建
IPC_SET 设置信号量的许可权
SETVAL 设置指定信号量的元素的值为 agc.val
GETVAL 获得一个指定信号量的值
GETPID 获得最后操纵此元素的最后进程ID
GETNCNT 获得等待元素变为1的进程数
GETZCNT 获得等待元素变为0的进程数
union senum 定义如下:
union senum{
int val
struct semid_ds *buf
unsigned short * array
}agc
其中 semid_ds 定义如下:
struct semid_ds{
struct ipc_pem sem_pem //operation pemission struct
time_t sem_otime //last semop()time
time_t sem_ctime //last time changed by semctl()
struct sem *sembase //ptr to first semaphore in array
struct sem_queue *sem_pending//pending operations
struct sem_queue *sem_pending_last//last pending operations
struct sem_undo *undo //undo requests on this arrary
unsigned short int sem_nsems//number of semaphores in set
}
1.4 对信号量 +1 或 -1 或测试是否为0
int semop(
int semid,
struct sembuf *sops, //指向元素操作数组
unsigned short nsops //数组中元素操作的个数
)
结构 sembuf 定义
sembuf{
short int sem_num//semaphore number
short int sem_op//semaphore operaion
short int sem_flg //operation flag
}
三、例子:
2.1 服务器
#include <sys/sem.h>
#include <sys/ipc.h>
#define SEGSIZE 1024
#define READTIME 1
union semun {
int val
struct semid_ds *buf
unsigned short *array
} arg
//生成信号量
int sem_creat(key_t key)
{
union semun sem
int semid
sem.val = 0
semid = semget(key,1,IPC_CREAT|0666)
if (-1 == semid){
printf("create semaphore error\n")
exit(-1)
}
semctl(semid,0,SETVAL,sem)
return semid
}
//删除信号量
void del_sem(int semid)
{
union semun sem
sem.val = 0
semctl(semid,0,IPC_RMID,sem)
}
//p
int p(int semid)
{
struct sembuf sops={0,+1,IPC_NOWAIT}
return (semop(semid,&sops,1))
}
//v
int v(int semid)
{
struct sembuf sops={0,-1,IPC_NOWAIT}
return (semop(semid,&sops,1))
}
int main()
{
key_t key
int shmid,semid
char *shm
char msg[7] = "-data-"
char i
struct semid_ds buf
key = ftok("/",0)
shmid = shmget(key,SEGSIZE,IPC_CREAT|0604)
if (-1 == shmid){
printf(" create shared memory error\n")
return -1
}
shm = (char *)shmat(shmid,0,0)
if (-1 == (int)shm){
printf(" attach shared memory error\n")
return -1
}
semid = sem_creat(key)
for (i = 0i <= 3i++){
sleep(1)
p(semid)
sleep(READTIME)
msg[5] = '0' + i
memcpy(shm,msg,sizeof(msg))
sleep(58)
v(semid)
}
shmdt(shm)
shmctl(shmid,IPC_RMID,&buf)
del_sem(semid)
return 0
//gcc -o shm shm.c -g
}
2.2 客户端
#include <sys/sem.h>
#include <time.h>
#include <sys/ipc.h>
#define SEGSIZE 1024
#define READTIME 1
union semun {
int val
struct semid_ds *buf
unsigned short *array
} arg
// 打印程序执行时间
void out_time(void)
{
static long start = 0
time_t tm
if (0 == start){
tm = time(NULL)
start = (long)tm
printf(" now start ...\n")
}
printf(" second: %ld \n",(long)(time(NULL)) - start)
}
//创建信号量
int new_sem(key_t key)
{
union semun sem
int semid
sem.val = 0
semid = semget(key,0,0)
if (-1 == semid){
printf("create semaphore error\n")
exit(-1)
}
return semid
}
//等待信号量变成0
void wait_v(int semid)
{
struct sembuf sops={0,0,0}
semop(semid,&sops,1)
}
int main(void)
{
key_t key
int shmid,semid
char *shm
char msg[100]
char i
key = ftok("/",0)
shmid = shmget(key,SEGSIZE,0)
if(-1 == shmid){
printf(" create shared memory error\n")
return -1
}
shm = (char *)shmat(shmid,0,0)
if (-1 == (int)shm){
printf(" attach shared memory error\n")
return -1
}
semid = new_sem(key)
for (i = 0i <3i ++){
sleep(2)
wait_v(semid)
printf("Message geted is: %s \n",shm + 1)
out_time()
}
shmdt(shm)
return 0
// gcc -o shmc shmC.c -g
}
欢迎分享,转载请注明来源:夏雨云
评论列表(0条)